<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Agnostic - Medium]]></title>
        <description><![CDATA[At Agnostic we try to build the easiest Web3 bridge for developers and analysts - Medium]]></description>
        <link>https://medium.com/agnosticeng?source=rss----3cce863fd570---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Agnostic - Medium</title>
            <link>https://medium.com/agnosticeng?source=rss----3cce863fd570---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 17:44:59 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/agnosticeng" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Agnostic Launches the First Open and Advanced Analytics Platform for Stellar]]></title>
            <link>https://medium.com/agnosticeng/agnostic-launches-the-first-advanced-analytics-platform-for-stellar-cd84e5e30cf1?source=rss----3cce863fd570---4</link>
            <guid isPermaLink="false">https://medium.com/p/cd84e5e30cf1</guid>
            <category><![CDATA[analytics]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[stellar]]></category>
            <dc:creator><![CDATA[Didier FRANC]]></dc:creator>
            <pubDate>Tue, 21 Apr 2026 04:49:30 GMT</pubDate>
            <atom:updated>2026-04-21T06:52:03.318Z</atom:updated>
            <content:encoded><![CDATA[<p>We’re excited to announce the official release of Agnostic’s Stellar Analytics platform: the first comprehensive solution that empowers the Stellar community to access, explore, and share on-chain data with ease.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*kZv9lAT3YYSd6eyQ" /></figure><h3>Stellar, Now Truly Observable</h3><p>Stellar has established itself as a leading blockchain infrastructure, recognized for its speed, reliability, and suitability for payments and stablecoins. Until now, however, accessing and analyzing Stellar’s on-chain data has been complex and fragmented. With Agnostic, that’s changing: developers, analysts, institutions, and ecosystem stakeholders now have powerful tools to query, visualize, and share blockchain data, without the burden of managing technical infrastructure.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JxzASWaSq6qvQNcfcsFEHQ.png" /><figcaption>Home Dashboard</figcaption></figure><h3>What’s Available Today</h3><p><strong>Agnostic’s release includes:</strong></p><ul><li><strong>ch-stellar:</strong> Custom functions that extend ClickHouse with Stellar-specific capabilities, including reading Galexie exports, decoding XDR, and making direct RPC requests to Soroban from SQL.</li><li><strong>Open Public Datasets:</strong> Continuously enriched and updated tables for accounts, transactions, contracts, liquidity pools, effects, operations, trades, and more, all in Apache Iceberg format, ready for the community.</li></ul><pre>Iceberg Endpoints<br><br>https://agnostic-stellar-iceberg-mainnet.agnostic.tech/accounts_v1/<br>https://agnostic-stellar-iceberg-mainnet.agnostic.tech/changes_v1/<br>https://stellar-iceberg-mainnet.agnostic.tech/contracts_data_v1/<br>https://stellar-iceberg-mainnet.agnostic.tech/events_v1/<br>https://stellar-iceberg-mainnet.agnostic.tech/ledgers_v1/<br>https://stellar-iceberg-mainnet.agnostic.tech/liquidity_pools_v1/<br>https://stellar-iceberg-mainnet.agnostic.tech/operations_v1/<br>https://stellar-iceberg-mainnet.agnostic.tech/trades_v1/<br>https://stellar-iceberg-mainnet.agnostic.tech/transactions_v1/<br>https://stellar-iceberg-mainnet.agnostic.tech/trustlines_v1/</pre><ul><li><strong>AGT ETL Pipelines:</strong> Open-source SQL pipelines for transforming and enriching Stellar data, making advanced research, institutional analysis, and DeFi monitoring straightforward.</li><li><strong>AGX:</strong> An interface for exploring, querying, and visualizing Stellar data, with AI-powered query generation, accessible to everyone from developers to business analysts.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*94Bndy78VGFCsuMTpKSdVw.png" /><figcaption>Agnostic Chat</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*V2y7t70FsFY4hGox43tSuA.png" /><figcaption>AGX</figcaption></figure><ul><li><strong>DGN:</strong> A collaborative hub for creating, publishing, and sharing dashboards and analytics notebooks focused on Stellar.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2R2WVJVIt1dx6LEvLt3j8g.png" /><figcaption>DGN</figcaption></figure><p>Our entire stack is open source (MIT), well-documented, and fully accessible. Dive into the code on <a href="https://github.com/agnosticeng">GitHub</a> or start exploring analytics at <a href="https://agnostic.dev/">agnostic.dev</a>.</p><h3>Built for the Entire Stellar Community</h3><p>Agnostic is designed for:</p><ul><li><strong>Developers:</strong> Track contracts, monitor protocol activity, and accelerate application analytics.</li><li><strong>Stablecoin Issuers &amp; Financial Institutions:</strong> Visualize flows, gain transparency, and ensure compliance with advanced reporting tools.</li><li><strong>DEXs, Market Makers, and Liquidity Providers:</strong> Analyze volumes, liquidity, trades, and market trends with flexible, SQL-native tools.</li><li><strong>Analysts &amp; Researchers:</strong> Access clean, reproducible datasets and create public dashboards to share insights with the ecosystem.</li></ul><h3>Unlocking Stellar’s Full Potential, Together</h3><p>With Agnostic, Stellar finally has a modern, open analytics layer. Whether you’re building the next DeFi application, tracking stablecoin flows, or just exploring blockchain data, Agnostic makes it accessible and actionable for everyone.</p><p><strong>Start exploring at </strong><a href="https://stellar.agnostic.tech/"><strong>https://stellar.agnostic.tech</strong></a>,<strong> check our documentation, or join the community!</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=cd84e5e30cf1" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agnosticeng/agnostic-launches-the-first-advanced-analytics-platform-for-stellar-cd84e5e30cf1">Agnostic Launches the First Open and Advanced Analytics Platform for Stellar</a> was originally published in <a href="https://medium.com/agnosticeng">Agnostic</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[dgn.space, blockchain analytics made social]]></title>
            <link>https://medium.com/agnosticeng/dgn-space-blockchain-analytics-made-social-65c41d960c85?source=rss----3cce863fd570---4</link>
            <guid isPermaLink="false">https://medium.com/p/65c41d960c85</guid>
            <category><![CDATA[data]]></category>
            <category><![CDATA[analytics]]></category>
            <category><![CDATA[ethereum]]></category>
            <dc:creator><![CDATA[Didier FRANC]]></dc:creator>
            <pubDate>Tue, 01 Apr 2025 13:40:09 GMT</pubDate>
            <atom:updated>2025-04-01T13:39:57.694Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VirtU4ZSrCxecy2A7G9EFw.jpeg" /><figcaption><a href="https://unsplash.com/photos/white-and-black-digital-wallpaper-Kj2SaNHG-hg">Vivid Sydney, Christopher Burns</a></figcaption></figure><h3>The State of Blockchain Data</h3><p>Blockchain analytics has come a long way, with powerful platforms like Dune Analytics, Nansen, and Glassnode shaping how we interact with on-chain data. These tools have brought valuable insights to the crypto space, each with its own strengths. However, they often come with inherent limitations — closed ecosystems, restricted transparency, and centralized data access. For those who value openness and decentralization, these constraints can hinder innovation and accessibility.</p><h3>An Open and Decentralized Alternative</h3><p>Enter <strong>Degen (dgn.space)</strong> — a groundbreaking, open-source, decentralized notebook platform designed to redefine how blockchain data is explored, shared, and understood.</p><p>Built on <strong>Agnostic’s open dataset</strong> and powered by <strong>ClickHouse infrastructure</strong>, Degen eliminates the barriers imposed by traditional platforms. Users can seamlessly query blockchain data and visualize insights with an intuitive experience. No gatekeeping, no hidden access controls — just raw, transparent, and community-driven analytics.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*vYvv7lGtOCKzBINc" /><figcaption><a href="https://dgn.space/">dgn.space</a></figcaption></figure><h3>The Perfect Complement to AGX</h3><p>Degen is the natural extension of <strong>AGX</strong>, offering rapid iterations, quick querying, and a social, gamified layer that enhances data exploration. It fosters collaboration, allowing users to combine Agnostic’s datasets with others to craft fully open-source insights. Whether you’re an analyst, a developer, or a crypto enthusiast, Degen turns blockchain data into a dynamic, interactive experience.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NdKAOeU7njbFNDPQZ7sSJg.png" /><figcaption><a href="https://agx.app/">agx.app</a></figcaption></figure><h3>Why Does This Matter?</h3><p>Transparency is at the core of blockchain, yet many analytics platforms remain centralized and closed. Degen changes this paradigm by ensuring complete control over your data and insights. It empowers users to <strong>explore, share, and collaborate</strong>without the restrictions of traditional platforms, fostering a more <strong>open, decentralized, and community-driven blockchain ecosystem</strong>.</p><h3>Join the Future of Blockchain Analytics</h3><p>The need for decentralized, transparent data tools has never been greater. Degen is here to unlock the full potential of blockchain analytics — making it more accessible, interactive, and engaging for everyone.</p><p>Ready to experience the next evolution of blockchain insights? <strong>Start your journey today at </strong><a href="https://dgn.space/"><strong>dgn.space</strong></a><strong> 🚀</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=65c41d960c85" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agnosticeng/dgn-space-blockchain-analytics-made-social-65c41d960c85">dgn.space, blockchain analytics made social</a> was originally published in <a href="https://medium.com/agnosticeng">Agnostic</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[agx, data analytics made easy]]></title>
            <link>https://medium.com/agnosticeng/agx-data-analytics-made-easy-4a5d2c61b873?source=rss----3cce863fd570---4</link>
            <guid isPermaLink="false">https://medium.com/p/4a5d2c61b873</guid>
            <category><![CDATA[analytics]]></category>
            <category><![CDATA[clickhouse]]></category>
            <category><![CDATA[data]]></category>
            <dc:creator><![CDATA[Didier FRANC]]></dc:creator>
            <pubDate>Wed, 12 Mar 2025 14:25:38 GMT</pubDate>
            <atom:updated>2025-03-12T14:24:47.564Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/900/1*124anzmsdSwh3fWEP1piww.jpeg" /></figure><p>In today’s data-driven world, the ability to access, analyze, and visualize data effectively is paramount. Whether you’re a data enthusiast, a researcher, or a business professional, having the right tools can make all the difference. Enter <strong><em>agx</em></strong>, a powerful desktop application designed to provide a seamless experience for exploring your own datasets and the multitude of open datasets available online.</p><h3>Why agx Stands Out</h3><p>agx combines the power of ClickHouse, a high-performance database engine, with a sleek and modern interface built using Tauri and SvelteKit. This combination ensures that users can enjoy native desktop application performance while leveraging the familiarity of web technologies. Here’s what sets <strong><em>agx</em></strong> apart:</p><ol><li>Intuitive User Interface: The <strong><em>agx</em></strong> interface is designed with user experience in mind. Using Svelte for the front end ensures smooth and responsive interactions. The application provides an interactive SQL query editor complete with syntax highlighting, making it easy to write and test queries without hassle.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6q9UcpcPU-b3WMUFYGo5JQ.png" /><figcaption>Query editor</figcaption></figure><p>2. Comprehensive Schema Browser: Understanding the structure of your data is crucial for effective analysis. <strong><em>agx</em></strong>’s schema browser lets users delve into data structures effortlessly, enabling exploration with just a few clicks.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/471/1*4ouOIvOPAWiZdIe_zgQMKw.jpeg" /><figcaption>Schema browser</figcaption></figure><p>3. Dynamic Data Visualization: Results from your queries are displayed in a clear tabular format, and with agx’s integration of visualization tools, presenting your data in an easily digestible manner becomes a breeze. Whether you need to create quick charts or detailed reports, agx equips you with the necessary tools.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NdKAOeU7njbFNDPQZ7sSJg.png" /><figcaption>Data visualization</figcaption></figure><p>4. Cross-Platform Compatibility: AGX is expertly designed to function smoothly both as a native application and as a web app. This ensures that users from diverse backgrounds can easily access their data, regardless of their operating system.</p><p>5. Drag &amp; Drop File Operations: AGX supports drag-and-drop file operations, simplifying data importation. This allows users to import datasets quickly without navigating convoluted menu options.</p><h3>Getting Started with AGX</h3><p>Setting up AGX is straightforward, whether opting for the live version or deploying it locally. Users can clone the repository and run it with Docker or build the native application directly by following easy installation steps. The detailed documentation provided ensures that even those new to data exploration can get started quickly.</p><h4>The easiest way is via: https://agx.app</h4><h4>You can also run a local instance:</h4><p>1. Clone the repository:</p><blockquote>git clone <a href="https://github.com/agnosticeng/agx">https://github.com/agnosticeng/agx</a> &amp;&amp; cd agx</blockquote><p>2. Run the application with Docker:</p><blockquote>docker compose up</blockquote><p>3. Access AGX via your web browser at;</p><blockquote><a href="http://localhost:8080/">http://localhost:8080</a></blockquote><h4>Or finally you can use the desktop app:</h4><blockquote>npm run tauri dev</blockquote><h3>Community and Contributions</h3><p>One of the standout strengths of <strong><em>agx</em></strong> is its open-source nature, which is not just a feature but a driving force that empowers innovation. This project actively invites contributions from users and developers, fostering a vibrant and collaborative ecosystem that thrives on shared expertise and creativity. By participating—whether through submitting a Pull Request or sharing personal user experiences—you&#39;re not just joining a community; you’re becoming an integral part of a movement that is transforming the future of technology. Join the AGX community today and help shape what comes next!</p><h3>Conclusion</h3><p><strong><em>agx</em></strong> is more than just a tool; it’s a gateway into the world of data exploration. Its superior performance, user-friendly interface, and robust feature set make it an indispensable resource for anyone looking to dive into datasets, whether they are personal or publicly available. By bridging the gap between complex data and clear insights, AGX empowers users to uncover hidden patterns and make informed decisions.</p><p>So, if you’re ready to elevate your data exploration experience, give AGX a try and unlock the potential of your data today!</p><p>Links:</p><ul><li><a href="https://agx.app/">https://agx.app</a></li><li><a href="https://github.com/agnosticeng/agx">https://github.com/agnosticeng/agx</a></li><li><a href="http://producthunt.com/p/agx-2">http://producthunt.com/p/agx-2</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4a5d2c61b873" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agnosticeng/agx-data-analytics-made-easy-4a5d2c61b873">agx, data analytics made easy</a> was originally published in <a href="https://medium.com/agnosticeng">Agnostic</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[7 Steps to Building a Powerful Crypto Data App (No Engineering Team Required)]]></title>
            <link>https://medium.com/agnosticeng/7-steps-to-building-a-powerful-crypto-data-app-no-engineering-team-required-7fe7598b116e?source=rss----3cce863fd570---4</link>
            <guid isPermaLink="false">https://medium.com/p/7fe7598b116e</guid>
            <category><![CDATA[finance]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[python]]></category>
            <dc:creator><![CDATA[John Calabrese]]></dc:creator>
            <pubDate>Fri, 11 Oct 2024 14:21:20 GMT</pubDate>
            <atom:updated>2024-10-11T15:39:16.837Z</atom:updated>
            <content:encoded><![CDATA[<p>Blockchain data can seem intimidating, and many of the tools available on the market charge thousands of dollars for access. But here’s the truth: you don’t need a huge budget or an engineering team to build a powerful crypto data app. In this article, I’ll walk you through how I built Token Pulse — a tool that tracks the most popular crypto projects by user growth — in 7 simple steps, leveraging publicly accessible blockchain data.</p><p>Let’s dive in and show you how you can build something similar without needing to spend a fortune.</p><h3>Step 1: Define Your Data Problem</h3><p>Before jumping into development, it’s important to define what problem you want to solve with blockchain data. In my case, I wanted to track user growth for crypto projects over time. I noticed a <a href="https://agnosticresearch.substack.com/p/unique-users-and-token-prices">strong correlation</a> between the number of unique users and token price movements, which sparked the idea for Token Pulse.</p><p><strong>Key Takeaway</strong>: Think about a specific problem or trend you want to analyze — whether it’s user growth, transaction volume, or on-chain liquidity.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ycEH1J0DSOiPKXnJuleppg.jpeg" /></figure><h3>Step 2: Use Pre-Indexed Blockchain Data</h3><p>Instead of building your own node or indexing blockchain data yourself (which can be complex and costly), use pre-indexed data sources like <a href="https://agnostic.dev/">Agnostic</a>. This makes pulling information like unique user counts and transaction volumes across chains simple.</p><p><strong>Key Takeaway</strong>: Explore available blockchain data APIs, such as Agnostic or <a href="https://www.infura.io/">Infura</a>, which allow you to access on-chain data without handling the heavy infrastructure yourself.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/450/1*pxUGS1X5bRqhKhNyvTuVHg.png" /><figcaption>Build your app with a pre-indexed data tool like Agnostic</figcaption></figure><h3>Step 3: Set Up a FastAPI Backend</h3><p>With the data problem defined and a data provider selected, it’s time to build the backend. I used Python’s FastAPI to create a lightweight server that fetches data from the Agnostic API through psycopg2 and natural Postgres SQL. This data can then be served to the frontend which we’ll look at in a later step.</p><p><strong>Key Takeaway</strong>: Set up a simple server to act as the engine of your app, making API requests to gather blockchain data and process the results.</p><h3>Step 4: Fetch, Transform, and Query Your Data</h3><p>Once you have a connection to blockchain data through Agnostic, one of the key tasks is querying it in a way that surfaces meaningful insights. In Token Pulse, I needed to compare user growth and transaction volume week over week. While the SQL query might look complex at first, it’s actually a straightforward task if you’re familiar with SQL. Or let AI query tools like <a href="https://chatgpt.com/g/g-pJskVjdiq-agnostic-query-guide">this one</a> do the work for you after you decribe the problem.</p><p>Here’s the basic idea behind the query: for each token, we calculate the total unique users from the past week and compare it with the previous week’s data. The same goes for transaction volumes. In SQL, this requires window functions to roll up data over time, but the logic itself is quite simple — just comparing two sets of numbers.</p><p>The Query:</p><pre>WITH token_activity AS (<br>    SELECT<br>        address AS token_address,<br>        DATE_TRUNC(&#39;day&#39;, timestamp) AS day,<br>        COUNT(DISTINCT input_0_value_address) AS unique_addresses,<br>        SUM(input_2_value_uint256) AS total_volume<br>    FROM evm_events_{chain}_mainnet_v1<br>    WHERE signature = &#39;Transfer(address,address,uint256)&#39;<br>    AND timestamp &gt;= NOW() - INTERVAL &#39;14 days&#39;<br>    GROUP BY token_address, DATE_TRUNC(&#39;day&#39;, timestamp)<br>    HAVING COUNT(DISTINCT input_0_value_address) &gt; 100<br>),<br>rolling_7_day AS (<br>    SELECT<br>        token_address,<br>        day,<br>        SUM(unique_addresses) OVER (PARTITION BY token_address ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS rolling_unique_addresses,<br>        SUM(total_volume) OVER (PARTITION BY token_address ORDER BY day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS rolling_total_volume<br>    FROM token_activity<br>),<br>comparison AS (<br>    SELECT<br>        token_address,<br>        MAX(CASE WHEN day BETWEEN NOW() - INTERVAL &#39;7 days&#39; AND NOW() THEN rolling_unique_addresses END) AS current_week_unique_addresses,<br>        MAX(CASE WHEN day BETWEEN NOW() - INTERVAL &#39;14 days&#39; AND NOW() - INTERVAL &#39;7 days&#39; THEN rolling_unique_addresses END) AS previous_week_unique_addresses,<br>        MAX(CASE WHEN day BETWEEN NOW() - INTERVAL &#39;7 days&#39; AND NOW() THEN rolling_total_volume END) AS current_week_total_volume,<br>        MAX(CASE WHEN day BETWEEN NOW() - INTERVAL &#39;14 days&#39; AND NOW() - INTERVAL &#39;7 days&#39; THEN rolling_total_volume END) AS previous_week_total_volume<br>    FROM rolling_7_day<br>    GROUP BY token_address<br>)<br>SELECT<br>    token_address,<br>    COALESCE(current_week_unique_addresses, 0) - COALESCE(previous_week_unique_addresses, 0) AS unique_addresses_growth,<br>    COALESCE(current_week_total_volume, 0) - COALESCE(previous_week_total_volume, 0) AS total_volume_growth<br>FROM comparison<br>ORDER BY unique_addresses_growth DESC<br>LIMIT 50;</pre><p>At first glance, it looks pretty detailed, but breaking it down, all it’s doing is:</p><ol><li><strong>Summing Unique Users</strong>: We group transactions by token and calculate how many unique users (input_0_value_address) interacted with the token over the past week and the week before.</li><li><strong>Summing Volumes</strong>: The same process is applied to transaction volumes (input_2_value_uint256).</li><li><strong>Comparing Weeks</strong>: Finally, we compare this week’s totals to the previous week’s to show growth or decline.</li></ol><p><strong>Why It’s Not So Bad</strong>: If you know SQL or use AI tools that can assist with query generation, this process becomes much easier. In fact, querying historical data is a common task in analytics, and tools like SQL make it possible to turn that into actionable insights quickly.</p><p><strong>Key Takeaway</strong>: Don’t let SQL queries intimidate you! With a clear understanding of what you want to track, tools like SQL make it easy to pull the insights you need.</p><h3>Step 5: Make It Work Across Multiple Chains</h3><p>One of the key features of Token Pulse is its ability to pull data from multiple blockchains — Ethereum, Base, Polygon, and Arbitrum. Instead of building separate apps for each chain, we streamlined the process by applying dynamic variables based on the selected chain. This included customizing the styling, explorer links, and data-fetching logic, all of which can be extended as new chains are supported by the data tool.</p><p><strong>How We Did It</strong>:</p><ul><li><strong>Styling</strong>: For each chain, we applied different colors and visual styles to match its branding. For example, Ethereum uses its signature dark gray color, while Polygon uses purple. This subtle change enhances user experience and makes it clear which chain’s data is being displayed.</li><li><strong>Explorer Links</strong>: Each chain has its own block explorer. We dynamically created explorer links based on the selected chain, allowing users to click through to the relevant token or transaction on the correct blockchain explorer (e.g., Etherscan for Ethereum or Polygonscan for Polygon).</li><li><strong>Data Fetching</strong>: We applied different API endpoints for each chain so that the data fetch aligns with the user’s choice. This way, Token Pulse can easily pull data from any supported chain, and the same logic can be extended to additional chains in the future.</li></ul><p>Here’s a snippet of the code that makes this possible:</p><pre>const chainUrls = {<br>    ethereum: {<br>        explorer: &quot;https://etherscan.io&quot;,<br>        barColor: &quot;#3C3C3D&quot;,<br>    },<br>    polygon: {<br>        explorer: &quot;https://polygonscan.com&quot;,<br>        barColor: &quot;#8247E5&quot;,<br>    },<br>    base: {<br>        explorer: &quot;https://basescan.org&quot;,<br>        barColor: &quot;#0052FF&quot;,<br>    },<br>    arbitrum: {<br>        explorer: &quot;https://arbiscan.io&quot;,<br>        barColor: &quot;#1C39BB&quot;,<br>    }<br>};<br><br>// Fetch and apply different styles and links based on the chain selected<br>function loadCharts(chain) {<br>    const chainInfo = chainUrls[chain];<br>    document.body.style.backgroundColor = chainInfo.bgColor;  // Apply background color for the chain<br>    // Other logic for rendering charts and setting explorer links dynamically...<br>}</pre><p><strong>Why It’s Powerful</strong>: This approach means that Token Pulse can easily be extended to as many chains as the data provider supports. Instead of rebuilding everything for each blockchain, you just apply dynamic variables that adjust the style, data source, and links based on the user’s choice.</p><p><strong>Key Takeaway</strong>: If you plan to support multiple chains in your app, set up dynamic variables for things like styles, links, and API endpoints. This keeps your codebase simple while offering cross-chain functionality.</p><h3>Step 6: Build a Clean, User-Friendly Frontend</h3><p>Now that the core functionality is in place, the next step is creating a simple frontend that users can interact with. In Token Pulse, we focused on a clean, intuitive design that lets users quickly switch between chains and view top tokens by user growth or transaction volume.</p><p><strong>How We Did It</strong>:</p><ul><li><strong>Charts and Data</strong>: We used JavaScript to create interactive charts that visualize token growth and transaction volume. Users can hover over bars to get more details or click on them to explore further on the respective blockchain explorer.</li><li><strong>Dynamic Content</strong>: The frontend adapts based on the selected chain (from <strong>Step 5</strong>), allowing users to switch between Ethereum, Polygon, Base, and Arbitrum data with ease.</li></ul><p><strong>Key Takeaway</strong>: When building your frontend, simplicity is key. Focus on clean visuals, clear information, and easy navigation. Don’t overcomplicate the interface — just let the data shine.</p><h3>Step 7: Deploy and Share!</h3><p>Once the app is built, it’s time to deploy. For Token Pulse, we chose Heroku for its simplicity and scalability. However, there are plenty of other options, such as Netlify or Vercel, that make deploying a web app easy and cost-effective.</p><p><strong>How We Did It</strong>:</p><ul><li><strong>Deployment</strong>: We deployed Token Pulse using Heroku, which allows for seamless integration with FastAPI and provides easy scalability as more users access the app.</li><li><strong>Sharing</strong>: After deployment, sharing the app with the crypto community was crucial for gathering feedback and driving improvements.</li></ul><p><strong>Key Takeaway</strong>: Deployment doesn’t have to be complicated. Choose a platform that fits your needs, deploy your app, and start gathering feedback. Continuous iteration is key to refining your tool.</p><p><strong>Conclusion</strong>: Building a powerful crypto data app like Token Pulse doesn’t have to be daunting or expensive. By following these steps, you can create an app that provides real-time insights into the blockchain world. With the right tools and approach, blockchain data is not only accessible but also empowering.</p><p>I invite you to try out <a href="https://token-pulse-4c9e7163d991.herokuapp.com/"><strong>Token Pulse</strong></a> and explore how it tracks the top crypto projects by user growth and transaction volume. Or check out the code on <a href="https://github.com/agnosticresearch/tokenpulse">GitHub</a>. Whether you’re a crypto enthusiast, investor, or just curious, I’d love to hear your feedback! Let me know if you find it helpful and feel free to comment on any improvements or features you’d like to see.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7fe7598b116e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agnosticeng/7-steps-to-building-a-powerful-crypto-data-app-no-engineering-team-required-7fe7598b116e">7 Steps to Building a Powerful Crypto Data App (No Engineering Team Required)</a> was originally published in <a href="https://medium.com/agnosticeng">Agnostic</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unlocking Token Secrets: Mapping Out Top Holders and Transfers — Part 2]]></title>
            <link>https://medium.com/agnosticeng/unlocking-token-secrets-mapping-out-top-holders-and-transfers-part-2-5c900c8e9f0a?source=rss----3cce863fd570---4</link>
            <guid isPermaLink="false">https://medium.com/p/5c900c8e9f0a</guid>
            <category><![CDATA[agnostic]]></category>
            <category><![CDATA[graph]]></category>
            <category><![CDATA[svelte]]></category>
            <category><![CDATA[ethereum]]></category>
            <dc:creator><![CDATA[Yann AMSELLEM]]></dc:creator>
            <pubDate>Mon, 07 Oct 2024 15:21:53 GMT</pubDate>
            <atom:updated>2024-10-09T11:11:00.562Z</atom:updated>
            <content:encoded><![CDATA[<h3>Unlocking Token Secrets: Mapping Out Top Holders and Transfers — Part 2</h3><p>In the <a href="https://medium.com/agnosticeng/unlocking-token-secrets-mapping-out-top-holders-and-transfers-part-1-32ac7a0cae0a"><strong>first part</strong></a> of this series, we dove into how to gather on-chain data for top token holders and their transfer volumes using SQL queries powered by Agnostic’s API. We showcased how easily developers and analysts can unlock insights into wallet clusters and token movements.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZoWt9OKSbE_MnsYDWz4GbA.jpeg" /><figcaption>Photo by <a href="https://unsplash.com/@boliviainteligente?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">BoliviaInteligente</a> on <a href="https://unsplash.com/photos/a-black-background-with-blue-and-purple-speckles-8a7iylIFspQ?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></figcaption></figure><p>Now, it’s time to take that data and bring it to life by converting our SQL queries into GraphQL APIs and integrating them into an interactive web app. We’ll walk through the <strong>GraphQL conversion</strong> process, and how we built our visualization using <strong>SvelteKit</strong> and <strong>D3.js</strong>.</p><h3>Converting SQL Queries into Usable GraphQL APIs</h3><p>In the <strong>first part </strong>of this series, we showed how to gather data for top token holders and their transfer volumes using SQL queries from Agnostic’s blockchain data collections. Now, let’s see how we can convert those SQL queries into usable <strong>GraphQL APIs</strong> so that we can pull this data dynamically into a web app.</p><p>At Agnostic, our platform includes a feature on the “Chart” interface where you can simply click the <strong>“Convert to GraphQL”</strong> button. This converts the SQL query into a GraphQL schema and endpoint. But what happens behind the scenes? Let’s break it down.</p><h4>Using Aliases to Build GraphQL Queries</h4><p>When converting SQL to GraphQL, we rely on <strong>aliases</strong> to structure the query. These aliases define which parts of the SQL query will be exposed as fields or arguments in the resulting GraphQL API.</p><ul><li><strong>gql_field_</strong>: This prefix is used to define fields that will be returned in the GraphQL response.</li><li><strong>gql_arg_</strong>: This prefix is used to define dynamic parameters (arguments) that can be passed to the query.</li></ul><p>Let’s take the two SQL queries from the <strong>first article</strong> and transform them into a GraphQL API.</p><p><strong>Top Token Holders</strong></p><p>The original SQL query used to retrieve the top token holders. To convert this query into GraphQL, we use aliases for both fields and arguments. Here’s how we adjust the query:</p><pre>with<br>  &#39;gql_arg_string_token&#39; as token,<br>  (select argMax(value, block_number) from token_total_supplies_ethereum_mainnet_v1 where token_address = token) as total_supply<br><br>select<br>  wallet_address as gql_field_string_wallet,<br>  argMax(value, block_number) as gql_field_string_amount,<br>  gql_field_string_amount / total_supply as gql_field_string_percent<br>from<br> token_balances_ethereum_mainnet_v1<br>where token_address = token<br>  and wallet_address != token<br>group by wallet_address<br>order by gql_field_string_percent desc<br>limit 150</pre><p>Here, we replaced the token address with a <strong>GraphQL argument</strong> (gql_arg_string_token) so it can be dynamically passed when making API requests. The fields we want to return — wallet address, token amount, and percentage — are now exposed using <strong>gql_field_</strong> aliases.</p><p>This creates the following GraphQL schema:</p><pre>type token_holders {<br>  wallet: String<br>  amount: String<br>  percent: String<br>}<br><br>type Query {<br>  token_holders(token: String!): [token_holders]<br>}</pre><p><strong>Token Transfers</strong></p><p>Let’s do the very same thing with the SQL query used to gather transfer volume data between wallets.</p><pre>with<br>  &#39;gql_arg_string_token&#39; as token,<br>  (select argMax(value, block_number) from token_total_supplies_ethereum_mainnet_v1 where token_address = token) as total_supply,<br><br>  holders as (<br>    select<br>      wallet_address,<br>      argMax(value, block_number) / total_supply as percent<br>    from<br>      token_balances_ethereum_mainnet_v1<br>    where token_address = token<br>      and wallet_address != token<br>    group by wallet_address<br>    order by percent desc<br>    limit 150<br>  )<br><br>select<br>  input_0_value_address as gql_field_string_source,<br>  input_1_value_address as gql_field_string_target,<br>  token_unit_amount(chain_name, chain_network_name, any(address), sum(input_2_value_uint256)) as gql_field_string_amount<br>from<br> evm_events_ethereum_mainnet_v1<br>where address = token<br>  and signature = &#39;Transfer(address,address,uint256)&#39;<br>  and gql_field_string_source in (select wallet_address from holders)<br>  and gql_field_string_target in (select wallet_address from holders)<br>group by gql_field_string_source, gql_field_string_target<br>order by gql_field_string_amount desc</pre><p>This creates the following GraphQL schema:</p><pre>type transfers_between_holders {<br>  source: String<br>  target: String<br>  amount: String<br>}<br><br>type Query {<br>  transfers_between_holders(token: String!): [transfers_between_holders]<br>}</pre><p>By converting these SQL queries into GraphQL, we make it easy to dynamically pull the latest token holder and transfer data into our app.</p><h3>Integrating our GraphQL API with SvelteKit app</h3><p>At Agnostic, we love using <strong>SvelteKit</strong> in our applications. Its simplicity, speed, and performance are key factors that make it ideal for building reactive web applications. Since <strong>SvelteKit</strong> compiles components into optimized vanilla JavaScript, we get smaller bundles and faster load times — perfect for handling large datasets like blockchain token balances and transfers.</p><p>Let’s integrate our GraphQL API into a <strong>SvelteKit</strong> app.</p><h4>Fetching Data with GraphQL in SvelteKit</h4><p>First, we need to fetch the data from our <strong>GraphQL API</strong>.</p><pre>// /[token]/page.server.js<br>import { AGNOSTIC_TOKEN } from &#39;$env/static/private&#39;;<br><br>const query = `<br> query TokenHoldersWithTransfers($token: String!) {<br>  token_holders(token: $token) {<br>   wallet<br>   amount<br>   percent<br>  }<br><br>  transfers_between_holders(token: $token) {<br>   source<br>   target<br>   amount<br>  }<br> }<br>`;<br><br>export const load = async (e) =&gt; {<br>  const { data } = await fetch(&#39;https://graphql.eu-west-1.agnostic.engineering/graphql&#39;, {<br>   method: &#39;POST&#39;,<br>   headers: { Authorization: AGNOSTIC_TOKEN },<br>   body: JSON.stringify({ query, variables: { token: e.params.token } })<br>  }).then((r) =&gt; r.json());<br>  <br>  return {<br>    holders: data.token_holders,<br>    transfers: data.transfers_between_holders<br>  };<br>};</pre><p>Once the data is fetched, we pass it into our Svelte component for display.</p><h4>Rendering the Graph with D3.js</h4><p>Now that we have the data, let’s render the graph.</p><p>Here’s an example of how we can implement the rendering of <strong>top holders</strong> as <strong>nodes</strong>, with <strong>edges</strong> between the nodes representing token <strong>transfer volumes</strong> using <strong>D3.js</strong> and <strong>Svelte</strong>:</p><pre>&lt;script&gt;<br>  import * as d3 from &#39;d3&#39;<br>  <br>  export let width;<br>  export let height;<br>  export let holders = [];<br>  export let transfers = [];<br><br>  // Positionning for the first render and the radius of each circle<br>  const pack = d3.pack()<br>    .size([width, height])<br>    .padding((n) =&gt; n.r + 50);<br>  <br>  // Position the lines and circles<br>  const simulation = d3<br>    .forceSimulation()<br>    .force(<br>      &#39;link&#39;,<br>      d3<br>        .forceLink()<br>        .id((d) =&gt; d.data.wallet)<br>        .distance((d) =&gt; d.source.r + d.target.r + 50)<br>    )<br>    .force(&#39;charge&#39;, d3.forceManyBody())<br>    .force(&#39;center&#39;, d3.forceCenter(width / 2, height / 2).strength(0.002))<br>    .on(&#39;tick&#39;, ticked);<br><br>  $: nodes = pack(<br>      d3.hierarchy({ children: holders }).sum((d) =&gt; d.percent)<br>    ).leaves();<br><br>  // small trick to keep record of the position of the nodes and edges <br>  // when the holders and transfers are updated<br>  $: {<br>    const old = new Map(simulation.nodes().map((n) =&gt; [n.data.wallet, n]));<br>    simulation.nodes(nodes.map((n) =&gt; Object.assign(n, old.get(n.data.wallet))));<br>    simulation.force(&#39;link&#39;)!.links(transfers.map((t) =&gt; Object.assign({}, t)));<br>    simulation.alpha(1).restart();<br>  }<br>  <br>  // update circles and lines coordinates at each iteration of the simulation<br>  function ticked() {<br>    const nodes = simulation.nodes();<br>    for (let i = 0; i &lt; nodes.length; i++) {<br>      const circle = document.querySelector(`circle[data-index=&quot;${i}&quot;]`);<br>      if (circle) {<br>        const d = nodes[i];<br>        circle.setAttribute(&#39;cx&#39;, d.x);<br>        circle.setAttribute(&#39;cy&#39;, d.y);<br>      }<br>    }<br>    <br>    const links = simulation.force(&#39;link&#39;)!.links();<br>    for (let i = 0; i &lt; links.length; i++) {<br>      const line = document.querySelector(`line[data-index=&quot;${i}&quot;]`);<br>      if (line) {<br>        const d = links[i];<br>        line.setAttribute(&#39;x1&#39;, d.source.x);<br>        line.setAttribute(&#39;y1&#39;, d.source.y);<br>        line.setAttribute(&#39;x2&#39;, d.target.x);<br>        line.setAttribute(&#39;y2&#39;, d.target.y);<br>      }<br>    }<br> }<br>&lt;/script&gt;<br><br>&lt;svg<br> viewBox=&quot;0 0 {width} {height}&quot;<br> {width}<br> {height}<br>&gt;<br>  &lt;defs&gt;<br>    &lt;marker<br>      id=&quot;arrow&quot;<br>      markerWidth=&quot;8&quot;<br>      markerHeight=&quot;6&quot;<br>      refX=&quot;7&quot;<br>      refY=&quot;3&quot;<br>      orient=&quot;auto&quot;<br>      markerUnits=&quot;userSpaceOnUse&quot;<br>    &gt;<br>      &lt;polygon points=&quot;0 0, 8 3, 0 6&quot; fill=&quot;#fff&quot; /&gt;<br>    &lt;/marker&gt;<br>  &lt;/defs&gt;<br>  &lt;g&gt;<br>    &lt;g class=&quot;circles&quot; fill=&quot;#6536a3&quot; stroke=&quot;#6536a3&quot; fill-opacity=&quot;0.2&quot;&gt;<br>      {#each nodes as d, i (d.data.wallet)}<br>        &lt;circle<br>          data-index={i}<br>          r={d.r}<br>          cx={d.x}<br>          cy={d.y}<br>        /&gt;<br>      {/each}<br>    &lt;/g&gt;<br>    &lt;g class=&quot;lines&quot; pointer-events=&quot;none&quot;&gt;<br>      {#each transfers as _, i}<br>        &lt;line<br>          data-index={i}<br>          stroke=&quot;#fff&quot;<br>          stroke-width=&quot;1&quot;<br>          stroke-opacity=&quot;0.6&quot;<br>          marker-end=&quot;url(#arrow)&quot;<br>        /&gt;<br>      {/each}<br>    &lt;/g&gt;<br>  &lt;/g&gt;<br>&lt;/svg&gt;</pre><p>You can also easily extend this to include features like zooming and dragging support, or even toggling wallet display based on user interactions.</p><h3>Explore the Graph</h3><p>We’ve now built an app that visualizes the top token holders and their transfer volumes as an interactive graph. Here’s a preview of the final graph:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gjqQ1pbre-kC65CmgAz9HA.png" /><figcaption>Screenshot of TokenFlow app by <a href="https://agnostic.dev/">Agnostic</a></figcaption></figure><p>This graph shows the <strong>top 150 Shiba Inu token holders</strong> as nodes, with the <strong>transfer volumes</strong> between them represented as edges. The size of each node reflects the amount of Shiba Inu each wallet holds, and each edge represents the volume of tokens transferred.</p><p>Want to see the live app we created throughout the article? Go check the app <a href="https://tokenflow.agnostic.dev/ethereum/0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE"><strong>TokenFlow</strong></a> by Agnostic</p><h3><strong>Wrapping Up</strong></h3><p>With just a few SQL queries converted into GraphQL, we’ve turned raw blockchain data into a powerful, interactive visualization. At Agnostic, we believe that accessing and visualizing blockchain data should be easy, and our API makes it possible for anyone to build their own <strong>graph-based applications</strong> in no time.</p><p>We hope this two-part series has given you insight into how you can leverage Agnostic’s API, SvelteKit, and D3.js to unlock token secrets and visualize on-chain data.</p><p>Ready to build your own graph? Start by exploring our <a href="https://app.agnostic.dev/s"><strong>community page </strong></a>and dive into the world of on-chain data visualization!</p><p><em>Full code available </em><a href="https://github.com/agnosticeng/token-flow/"><strong><em>here</em></strong></a></p><p>Stay tuned for more updates and tutorials from Agnostic, and don’t forget to share your creations with us on social!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5c900c8e9f0a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agnosticeng/unlocking-token-secrets-mapping-out-top-holders-and-transfers-part-2-5c900c8e9f0a">Unlocking Token Secrets: Mapping Out Top Holders and Transfers — Part 2</a> was originally published in <a href="https://medium.com/agnosticeng">Agnostic</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Unlocking Token Secrets: Mapping Out Top Holders and Transfers — Part 1]]></title>
            <link>https://medium.com/agnosticeng/unlocking-token-secrets-mapping-out-top-holders-and-transfers-part-1-32ac7a0cae0a?source=rss----3cce863fd570---4</link>
            <guid isPermaLink="false">https://medium.com/p/32ac7a0cae0a</guid>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[agnostic]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[data-visualization]]></category>
            <dc:creator><![CDATA[Yann AMSELLEM]]></dc:creator>
            <pubDate>Mon, 30 Sep 2024 15:22:12 GMT</pubDate>
            <atom:updated>2024-09-30T15:44:02.574Z</atom:updated>
            <content:encoded><![CDATA[<h3>Unlocking Token Secrets: Mapping Out Top Holders and Transfers — Part 1</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cpQ74AFPi7F5HIGIkmJjIQ.jpeg" /><figcaption>Photo by <a href="https://unsplash.com/fr/@nuvaproductions?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Javier Miranda</a> on <a href="https://unsplash.com/fr/photos/accessoire-cloute-rond-cloute-argent-xB2XP29gn10?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></figcaption></figure><p>Blockchain data visualizations have become indispensable tools for analysts and developers alike, helping to uncover insights into token holders, transaction flows, and wallet clusters. Graph-based representations of wallets and token transfers have been highlighted by platforms like <a href="https://platform.arkhamintelligence.com/"><strong>Arkham</strong></a> and <a href="https://app.bubblemaps.io/"><strong>BubbleMaps</strong></a>, showcasing how these visualizations can reveal hidden patterns in on-chain activity.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DpdQz6Ed8VhtzC-mq-pqHQ.jpeg" /><figcaption>Arkham Visualizer — Blackrock on BTC chain</figcaption></figure><p>At <strong>Agnostic</strong>, we wanted to demonstrate how easy it is to build similar visualizations using our API. In this article, we’ll walk through how we collected and analyzed data about the <strong>top wallets</strong> and their <strong>transfer volumes</strong> using SQL queries from our API, allowing us to construct an interactive graph of token activity.</p><p>Ready? Let’s dive into the data-gathering process and show you just how easy it is to get these insights.</p><h3>Data Gathering: Collecting the Top Wallets Holding a Specified Token</h3><p>To construct our graph, the first step is to gather the <strong>top wallets</strong> holding the token of interest. These wallets will become the <strong>nodes</strong> of our graph. We need to retrieve the balance of each wallet at the latest block and determine what percentage of the total token supply each wallet holds.</p><p>Here’s the SQL query we used to gather the top 150 wallets for a specified token:</p><pre>with<br>  &#39;&lt;token_address&gt;&#39; as token, <br>  (select argMax(value, block_number) from token_total_supplies_ethereum_mainnet_v1 where token_address = token) as total_supply -- dynamically get the latest total supply<br><br>select<br>  wallet_address,<br>  argMax(value, block_number) as amount, -- get the balance of the token at the most recent block<br>  amount / total_supply as percent -- calculate what percentage of the total supply each wallet holds<br>from<br>  token_balances_ethereum_mainnet_v1<br>where<br>  token_address = token<br>  and wallet_address != token -- exclude the token contract itself from the list<br>group by<br>  wallet_address<br>order by<br>  amount desc -- rank wallets by the largest holders first<br>limit 150</pre><p>This query extracts:</p><ul><li>The <strong>latest token balances</strong> for each wallet.</li><li>The <strong>total token supply</strong> at the latest block.</li><li>The percentage of the total supply that each wallet controls.</li></ul><p>These wallets form the <strong>nodes</strong> of our graph, and the size of each node can be adjusted based on the percentage of tokens held.</p><h3>Tracking Token Transfers Between Wallets</h3><p>With the top wallets identified, the next step is to collect the <strong>volume of token transfers</strong> between these wallets. These transfer volumes will form the <strong>edges</strong> of our graph, connecting the nodes based on the amount of tokens moved between them over time.</p><p>Here’s the SQL query we used to collect the <strong>total volume</strong> of Shiba Inu tokens transferred between the top 150 wallets:</p><pre>with<br>  &#39;&lt;token_address&gt;&#39; as token, -- specify the token contract<br><br>  holders as (<br>    select<br>      wallet_address,<br>      argMax(value, block_number) as balance -- same method to get the latest balances<br>    from<br>      token_balances_ethereum_mainnet_v1<br>    where<br>      token_address = token<br>    group by<br>      wallet_address<br>    order by<br>      balance desc<br>    limit 150 -- focus on the top 150 holders<br>  )<br><br>select<br>  input_0_value_address as &quot;from&quot;, -- sender address<br>  input_1_value_address as &quot;to&quot;, -- receiver address<br>  token_unit_amount(chain_name, chain_network_name, any(address), sum(input_2_value_uint256)) as value -- sum the total transfer value between wallets<br>from<br>  evm_events_ethereum_mainnet_v1 -- track all ERC-20 Transfer events<br>where<br>  address = token<br>  and signature = &#39;Transfer(address,address,uint256)&#39; -- focus on the Transfer event signature<br>  and &quot;from&quot; in (select wallet_address from holders) -- include only transfers between the top holders<br>  and &quot;to&quot; in (select wallet_address from holders)<br>group by<br>  &quot;from&quot;, &quot;to&quot; -- group transfers by sender and receiver<br>order by<br>  value desc -- order by the largest transfer values</pre><p>This query:</p><ul><li>Defines the token address and collects <strong>transfer volumes</strong> between the top 150 wallets.</li><li>Filters the Transfer(address,address,uint256) event, ensuring we capture token transfers between the key holders.</li><li>Aggregates the <strong>total volume of tokens</strong> transferred between wallets and groups by the sender and receiver.</li></ul><p>The result is a list of <strong>edges</strong> that connect the nodes in our graph, with the edge thickness representing the <strong>volume</strong> of tokens transferred between wallets.</p><h3>To Go deeper: Explore the Results on Agnostic’s Marketplace</h3><p>To give you a real-world example, we’ve published the results for the <strong>Shiba Inu token</strong> directly on Agnostic’s Marketplace. You can explore the live data, which includes:</p><ul><li>The <a href="https://app.agnostic.dev/s/c/AsJHEfqpwA7"><strong>top 150 wallets holding Shiba Inu</strong></a>, along with their balances and the percentage of the total supply they hold.</li><li>The <a href="https://app.agnostic.dev/s/c/B5k4FamBNvT"><strong>total transfer volumes</strong></a> between these wallets, showing how tokens flow between key players.</li></ul><h3>What’s Next: Visualizing the Data</h3><p>With the data gathered, the next step is transforming it into a <strong>graph-based visualization</strong>. In the second part of this series, we’ll walk through how to integrate the data into a <strong>SvelteKit</strong> application, utilizing <strong>D3.js</strong> for the front-end visualization. We’ll demonstrate how the wallet nodes and transfer edges come to life in an interactive graph.</p><p>Stay tuned for Part 2, where we’ll turn this data into a fully interactive, real-time visualization.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=32ac7a0cae0a" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agnosticeng/unlocking-token-secrets-mapping-out-top-holders-and-transfers-part-1-32ac7a0cae0a">Unlocking Token Secrets: Mapping Out Top Holders and Transfers — Part 1</a> was originally published in <a href="https://medium.com/agnosticeng">Agnostic</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building the Backbone of Agnostic: A Closer Look at Our Blockchain Infrastructure]]></title>
            <link>https://medium.com/agnosticeng/building-the-backbone-of-agnostic-a-closer-look-at-our-blockchain-infrastructure-09d48fd34890?source=rss----3cce863fd570---4</link>
            <guid isPermaLink="false">https://medium.com/p/09d48fd34890</guid>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[infrastructure]]></category>
            <dc:creator><![CDATA[Arnaud Briche]]></dc:creator>
            <pubDate>Wed, 24 Jan 2024 16:53:16 GMT</pubDate>
            <atom:updated>2024-01-24T16:53:16.680Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L_QaoWeSi0aKrqtDsjZiAA.jpeg" /><figcaption><a href="https://www.vecteezy.com/members/dihard909820689">Dzmitry Baranau</a></figcaption></figure><h3>Introduction</h3><p>At Agnostic, our mission is to democratize access to well-structured blockchain data. We aim to provide a swift, user-friendly, and robust method for querying the vast volumes of data generated by smart contract blockchains. At the heart of our operations lies a fundamental process: aggregating extensive data from blockchain nodes, decoding it, and indexing it in diverse ways to facilitate rapid and flexible data queries. As we continually retrieve data from the blockchain, one of our primary prerequisites for delivering on our mission is ensuring fast and dependable access to blockchain nodes.</p><h3>I. Blockchain Archive Nodes: A Vital Component</h3><p>Blockchain archive nodes are the unsung heroes of the blockchain ecosystem. These specialized nodes play a pivotal role in Agnostic’s mission to provide comprehensive and reliable blockchain data.</p><p>Archive nodes are a distinct type of blockchain node that stores the complete history of a blockchain, including every transaction, smart contract interaction, and state change since its inception. They serve as the historical record-keepers of blockchain networks.</p><p>They allow Agnostic to access historical blockchain data, enabling users to trace the evolution of smart contracts, token transfers, and more over time.</p><h3>II. The Cost Challenge: Why Self-Hosted Nodes?</h3><p>In our pursuit of securing fast and dependable access to blockchain nodes for Agnostic indexers, we swiftly recognized that relying on third-party RPC providers would be financially unsustainable. These providers often impose charges based on request volume, and levy premiums for accessing historical data — a requirement crucial for indexers.</p><p>Drawing from our collective experience in managing extensive infrastructure, including bare-metal servers from previous roles, we opted for the self-hosted approach. However, achieving stability and robustness in our node fleet was no small feat and involved a significant trial-and-error process.</p><p>Our self-hosted node strategy was guided by several key technical decisions:</p><ul><li>We prioritized using Erigon-based clients whenever available, as they proved to be more cost-effective and easier to fine-tune.</li><li>For reliable performance and satisfying availability, we employed fast NVMe disks configured in a RAID setup on bare-metal servers.</li><li>We used the fastest network-attached disks in a given cloud environment, as local disks are a no-go for persistent data.</li><li>We implemented ZFS, capitalizing on valuable features such as snapshots and transparent compression.</li></ul><p>The result? We successfully established and maintained a robust fleet of archive nodes that deliver both speed and reliability while remaining cost-effective.</p><h3>III. Balancing Act: Scaling our blockchain infrastructure while keeping costs under control</h3><p>From the inception of Agnostic, we made a deliberate choice to address our infrastructure scaling needs by creating multiple, mostly independent Points of Presence (PoPs). This approach involves building relatively small, geographically distributed clusters that operate without shared infrastructure components like networking, storage, or control planes.</p><p>Within each PoP, we ensure the presence of at least one archive node for each supported blockchain, allowing indexers to access data locally. However, to fulfill our commitment as a reliable infrastructure provider, redundancy becomes imperative to withstand potential failures. This redundancy entails having a pair of archive nodes for each blockchain within each PoP. While this redundancy boosts resilience, it can also incur significant costs.</p><p>In our experience, most node failures have resulted from issues like failed software updates or temporary hardware or network glitches, leading to downtimes in the order of hours. This has prompted us to rethink our approach. Is there a more cost-effective way to address these transient failures without bearing the full expense of redundant nodes for each blockchain in each PoP, just in case?</p><p>Certainly, we believe there’s room for improvement.</p><h3>IV. The Genesis of Agnostic’s Proxy: Cheap but effective High Availability strategy”</h3><p>We embarked on a journey to devise a more cost-effective yet equally reliable solution. The vision was clear: to create a system that would allow PoPs to tap into the resources of other PoPs when their local infrastructure encountered unavailability. This ingenious approach aimed to achieve robust availability while optimizing operational costs — a fundamental principle guiding our actions at Agnostic.</p><p>This pivotal moment marked the birth of our in-house blockchain RPC proxy system — a cornerstone of Agnostic’s infrastructure.</p><h3>V. Efficient Traffic Management with Node Proxy: Smart Routing for Blockchain RPC traffic</h3><p>The core configuration of our proxy revolves around a fundamental concept: pools. Each pool comprises nodes organized into tiers (tier-1, tier-2, tier-3, and so on). Our proxy maintains ongoing, out-of-band communication with these nodes, gathering both general health data and blockchain-specific information, such as the height of the highest available block.</p><p>Additionally, within each pool, a designated probe node is configured. This probe node serves as a reference point for calculating a lag metric for every other node in the pool. This metric is derived from the difference between the highest block number reported by the probe node and the corresponding number reported by each individual node in the pool.</p><p>For every pool, we define a maximum allowable lag threshold, and nodes that exceed this threshold are marked as unhealthy. Incoming traffic to a pool is intelligently distributed among the healthy nodes belonging to the lowest, non-empty tier. For instance, as long as at least one tier-1 node remains healthy, all traffic destined for the pool is directed to this node.</p><p>Let’s consider an example of a pool configured for Ethereum Mainnet in PoP A:</p><ul><li>Probe Node: Alchemy RPC provider</li><li>Tier-1: Ethereum archive nodes from the local Kubernetes (K8S) cluster</li><li>Tier-2: Node Proxy of PoP B</li><li>Tier-3: Node Proxy of PoP C</li><li>Tier-4: Infura RPC provider</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ec_CaI4t2lXhzD8IsXwcaw.png" /><figcaption>Example topology of Node Proxy deployment</figcaption></figure><p>This setup ensures that traffic primarily flows to the local node. Only in the event of a failure or maintenance of the local node will traffic be directed to PoP B and subsequently to PoP C. In the rare scenario where all self-hosted nodes are unavailable, we resort to calling upon an RPC provider, albeit at a premium cost. This strategic approach buys us crucial time to address in-house node issues swiftly and efficiently.</p><h3>VI. Simplified Application Configuration: How Agnostic’s Proxy Enhances Indexer Performance</h3><p>When crafting high-performance indexers, we often employ various optimizations to harness the full potential of node RPC APIs. One of the most notable optimizations is the extensive use of request batching. However, this approach can become problematic when dealing with RPC APIs provided by a diverse range of nodes.</p><p>For instance, we used to set remarkably high batch size limits on our self-hosted nodes to maximize hardware utilization. In contrast, RPC providers tended to impose relatively smaller batch size limits. This discrepancy created a conundrum for us: either we could compromise on performance and use suboptimal settings to accommodate the more conservative nodes, or we risked lower availability by tailoring our application exclusively to the self-hosted nodes.</p><p>As part of our ongoing investment in the in-house proxy layer to enhance availability, we made a strategic decision to address these inconsistencies at the proxy level. This approach allowed us to fine-tune indexer configurations aggressively for ideal scenarios (when accessing self-hosted nodes), while simultaneously ensuring transparent and graceful handling of nodes with more conservative settings.</p><p>The proxy now excels in ensuring that we adhere to various limits on parameters such as maximum batch size and rate limits, regardless of the client’s settings. This proactive management guarantees uninterrupted operation, even under challenging conditions, offering both performance optimization and robustness.</p><h3>VII. Securing Access and Monitoring Performance</h3><p>Our proxy layer seamlessly integrates security and performance enhancement. Authentication serves as our security foundation, permitting access solely to authorized entities.</p><p>To provide controlled access for untrusted clients, we rely on JSON Web Tokens (JWTs) with encoded limitations, such as batch size, method restrictions, and rate limits. These safeguards prevent disruptions and misuse. Simultaneously, our proxy layer diligently monitors metrics in real time, offering insights into infrastructure performance, health, and usage patterns. This comprehensive approach guarantees a stable, secure, and transparent blockchain data access system.</p><h3>Conclusion: A Glimpse into Agnostic’s Infrastructure Success</h3><p>In our exploration of Agnostic’s blockchain infrastructure, we’ve unveiled its intricacies, challenges, and innovative solutions, showcasing the significance of our mission.</p><p>Our Commitment to Efficiency: At the core of Agnostic’s infrastructure is an unwavering dedication to efficiency. We self-host blockchain nodes, optimize costs, and establish a resilient architecture to deliver outstanding blockchain data services without imposing exorbitant expenses on users.</p><p>Resilience and Prudent Redundancy: We prioritize resilience by implementing multiple, mostly independent Points of Presence (PoPs). Geographically distributed resources and redundancy fortify our infrastructure against potential failures, ensuring uninterrupted service for our users.</p><p>Cost-Effective Redundancy: Our innovative approach to handling node failures via a proxy mesh network underscores our commitment to cost-effectiveness. By leveraging our distributed node fleet, we optimize costs while preserving availability.</p><p>This glimpse into Agnostic’s infrastructure success signifies more than technological achievements; it underscores our steadfast dedication to simplifying blockchain development and data access. Looking ahead, we remain devoted to innovation and excellence, poised to refine and expand our infrastructure to serve our growing user base, leading the charge in advancing the blockchain data landscape. Join us as we propel Agnostic into new frontiers of blockchain technology, where accessibility, efficiency, and reliability converge to redefine what’s possible in blockchain data services.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=09d48fd34890" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agnosticeng/building-the-backbone-of-agnostic-a-closer-look-at-our-blockchain-infrastructure-09d48fd34890">Building the Backbone of Agnostic: A Closer Look at Our Blockchain Infrastructure</a> was originally published in <a href="https://medium.com/agnosticeng">Agnostic</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Taming the Beast: A Journey Through Blockchain Data Access with Agnostic]]></title>
            <link>https://medium.com/agnosticeng/taming-the-beast-a-journey-through-blockchain-data-access-with-agnostic-664bc0447c90?source=rss----3cce863fd570---4</link>
            <guid isPermaLink="false">https://medium.com/p/664bc0447c90</guid>
            <category><![CDATA[blockchain]]></category>
            <category><![CDATA[ethereum]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[data]]></category>
            <dc:creator><![CDATA[Didier FRANC]]></dc:creator>
            <pubDate>Sun, 30 Apr 2023 15:36:05 GMT</pubDate>
            <atom:updated>2023-09-22T00:27:46.589Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9sUd7nJItmQeIJ0kokt_sg.jpeg" /><figcaption><a href="https://unsplash.com/fr/@tateisimikito">Jukan Tateisi</a></figcaption></figure><h4>Join us as we navigate the labyrinth of blockchain data access and reveal how Agnostic is revolutionizing how builders and analysts harness the power of Web3.</h4><h4>Introduction</h4><p>Blockchain technology has disrupted industries and promised a more transparent, decentralized, and secure future. Amid this revolution, our small but dedicated team at Agnostic, including myself, Arnaud Briche, and Yann Amsellem, embarked on a mission to unravel the complexities of accessing data from EVM-compatible blockchains like Ethereum, Arbitrum, and Polygon. As the CEO and co-founder, I am proud to be a part of this journey alongside my talented teammates. I invite you to discover how Agnostic has emerged as a game-changing solution for builders and analysts seeking to harness the power of blockchain data.</p><h4>Chapter 1: The Genesis — Encountering the Beast</h4><p>Our story began when we realized that despite the wealth of information contained within EVM-compatible blockchains, accessing, decoding, and utilizing this data was far from straightforward. The challenges we faced were numerous:</p><ul><li><strong>The Node Barrier</strong>: We quickly discovered that accessing blockchain data requires relying on costly nodes provided by companies like Infura or Alchemy. This expense created a financial barrier that stood in the way of unlocking the full potential of blockchain data.</li><li><strong>Decoding the Puzzle</strong>: Each smart contract encoded data differently on the chain, making decoding a complex and time-consuming task requiring significant expertise and resources.</li><li><strong>Indexing Maze</strong>: We understood that properly indexing blockchain data was essential for efficient querying and analysis, but this process needed to be more manageable, resource-intensive, and challenging to implement effectively.</li><li><strong>A Dearth of Analytics Tools</strong>: We found that the unique nature of blockchain data demanded tailored analytics tools, but many existing solutions fell short, making the analysis process more difficult and time-consuming.</li></ul><h4>Chapter 2: The Quest — Building Agnostic</h4><p>Undeterred by these challenges, we created a solution to overcome the complexities of accessing EVM-compatible blockchain data. Our unwavering commitment to this mission led us to develop Agnostic. This platform streamlines extracting and leveraging data from these blockchains by providing low-latency SQL access.</p><p>As we ventured deeper into the world of blockchain data, we continued to expand Agnostic’s capabilities:</p><ul><li><strong>Decoding Mastery</strong>: We tirelessly worked to improve our decoding prowess, and today, Agnostic successfully decodes approximately 90% of the available data. This breakthrough allows users to access a wealth of previously obscured information, making more informed decisions and building more robust applications.</li><li><strong>Seamless Compatibility</strong>: We realized the importance of integrating with popular analytics and monitoring tools, so we ensured Agnostic’s compatibility with the PostgreSQL protocol. This feature allows Agnostic to effortlessly incorporate tools like Grafana and Superset, simplifying the analysis process and broadening the range of tools available to users.</li><li><strong>The Power of an Integrated SQL IDE</strong>: To make data extraction more intuitive and user-friendly, we developed an integrated SQL IDE that enables users to craft SQL queries easily, complete with autocomplete features. This design empowers users to extract the exact data they need while minimizing the learning curve typically associated with querying blockchain data.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rIUkfJUZeqGthuydzwY0wg.png" /><figcaption>The Agnostic IDE</figcaption></figure><ul><li><strong>Unleashing the Potential of GraphQL API</strong>: We wanted builders to focus on creating cutting-edge applications without getting bogged down by data access challenges. So, we incorporated a feature that enables users to generate a GraphQL API directly from their SQL queries. This simplifies the process of building dApps and accessing live, low-latency data.</li></ul><h4>Chapter 3: The Reward — Agnostic’s Impact on the Blockchain Ecosystem</h4><ul><li><strong>Revolutionizing DevOps</strong>: Agnostic’s compatibility with Grafana allows developers to monitor their smart contract data like never before. This integration streamlines tracking and managing on-chain data, resulting in more efficient and proactive DevOps practices. Additionally, the alerting system ensures that potential issues are identified and addressed promptly, reducing the risks associated with operating in the Web3 environment.</li><li><strong>Empowering Analysts</strong>: As the leading data indexing platform for EVM-compatible blockchains, Agnostic has become an invaluable tool for analysts seeking insights from blockchain data. The platform’s ability to decode and index vast amounts of data, coupled with its compatibility with leading analytics tools, enables analysts to unlock the full potential of blockchain information, driving better decision-making and uncovering new opportunities.</li><li><strong>Building a Community</strong>: At the heart of Agnostic’s success is our commitment to fostering a vibrant and engaged community of users, partners, and enthusiasts. By providing comprehensive documentation, responsive support, and continuously improving our platform based on user feedback, we strive to create an environment that nurtures collaboration and innovation.</li></ul><h4>Chapter 4: The Road Ahead — Agnostic’s Vision for the Future</h4><p>Our journey thus far has been challenging and rewarding, but we know much is still to be done. As we continue to refine and expand our platform, we remain focused on our core mission: to simplify and democratize access to EVM-compatible blockchain data.</p><p>Looking ahead, we are committed to:</p><ul><li><strong>Expanding our coverage</strong>: As the blockchain landscape evolves, we will strive to support other EVM-compatible networks, ensuring that our users can access the most relevant and up-to-date data.</li><li><strong>Enhancing the developer experience</strong>: We will continue to invest in our integrated SQL IDE, autocomplete features, and GraphQL API generation capabilities, making it even easier for developers to build robust and innovative applications on top of EVM-compatible blockchains.</li><li><strong>Strengthening our community</strong>: We will deepen our engagement with users, partners, and the broader blockchain community, fostering collaboration and knowledge-sharing to drive the future of decentralized technology.</li></ul><h4>Conclusion</h4><p>Our journey through the complexities of EVM-compatible blockchain data access has been one of discovery, innovation, and growth. As we continue to develop Agnostic, we remain dedicated to empowering builders and analysts with the tools they need to unlock the full potential of the Web3 world. Together, we will shape the future of decentralized technology and create a more open, transparent, and secure digital ecosystem.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=664bc0447c90" width="1" height="1" alt=""><hr><p><a href="https://medium.com/agnosticeng/taming-the-beast-a-journey-through-blockchain-data-access-with-agnostic-664bc0447c90">Taming the Beast: A Journey Through Blockchain Data Access with Agnostic</a> was originally published in <a href="https://medium.com/agnosticeng">Agnostic</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>