<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abhay Nayak</title>
    <description>The latest articles on DEV Community by Abhay Nayak (@quantbase).</description>
    <link>https://dev.to/quantbase</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4190383%2Fee4b613d-57bd-41b9-9942-f7b134749fe8.png</url>
      <title>DEV Community: Abhay Nayak</title>
      <link>https://dev.to/quantbase</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quantbase"/>
    <language>en</language>
    <item>
      <title>Who's really behind a meme coin? We built a graph agent to find out</title>
      <dc:creator>Abhay Nayak</dc:creator>
      <pubDate>Sun, 18 Oct 2026 14:08:10 +0000</pubDate>
      <link>https://dev.to/quantbase/sniff-four-days-one-graph-and-an-honest-answer-about-meme-coins-47af</link>
      <guid>https://dev.to/quantbase/sniff-four-days-one-graph-and-an-honest-answer-about-meme-coins-47af</guid>
      <description>&lt;p&gt;&lt;em&gt;By team QuantBase, for WeMakeDevs × FalkorDB Graph Hacks, October 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Favasis-ai%2Fquant-agent%2Fmain%2Fdocs%2Fblog%2F00-hero-800.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fraw.githubusercontent.com%2Favasis-ai%2Fquant-agent%2Fmain%2Fdocs%2Fblog%2F00-hero-800.gif" alt="A small dog on a dark ridge at sunset following glowing trails of light that connect hundreds of coins across a valley" width="600" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Every coin leaves a trail. The trick is knowing which threads to follow.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch the 2-minute story first:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/fz89p-YZS6o" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  A new coin, an unfamiliar creator
&lt;/h2&gt;

&lt;p&gt;A new coin appears in your feed. People are buying it. You can see a name and a price, but you have no idea who made it. Before putting money in, you'd like to know who you're dealing with.&lt;/p&gt;

&lt;p&gt;Meme coins are joke tokens anyone can launch in a minute. On pump.fun, the site where most of them launch, you can start by checking the creator's wallet, an account address. Funding a wallet means sending it the few cents it needs to launch. Follow that payment and you might find other creators the same payer funded.&lt;/p&gt;

&lt;p&gt;We built Sniff during Graph Hacks to follow those connections. To a graph, this is a fraud-ring problem: accounts that look unrelated can share a payer. A shared payment is a lead to inspect, not proof of fraud or common ownership. You don't need to trade these coins to recognise the database problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day 1: we loaded the graph, then connected too much
&lt;/h2&gt;

&lt;p&gt;We started with a snapshot from our QuantBase collector, which existed before the event. It ends on &lt;strong&gt;14 October 2026 at 18:45 UTC&lt;/strong&gt;. First we had to remove other launch sites and old tokens that someone had reported as new. One established coin had a fake September launch date. It didn't belong in a launch history.&lt;/p&gt;

&lt;p&gt;We kept &lt;strong&gt;632,339 coins, 424,007 wallets and about 1.5 million links&lt;/strong&gt;. FalkorDB's bulk loader took &lt;strong&gt;30 seconds&lt;/strong&gt; to load them. The graph used 521 MB of memory.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm9dlho5n7vpwmw854j1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm9dlho5n7vpwmw854j1t.png" alt="The lineage graph schema: Wallet CREATED Coin, Wallet FUNDED Wallet, Wallet SNIPED Coin, Coin LINKS Handle, Wallet IN_RING Ring, with Hub as a dashed dead end" width="800" height="446"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The &lt;code&gt;lineage&lt;/code&gt; graph. Five kinds of thing, five kinds of link. The questions that had been painful in SQL became one Cypher pattern each.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Our first query followed the path we'd been trying to untangle with SQL joins: coin, creator, payer, other creators paid by that payer. In Cypher, FalkorDB's graph query language, we could write that path as one pattern.&lt;/p&gt;

&lt;p&gt;Then we tried connecting random coins. Our first version kept finding paths within four hops. We'd built an excellent way to discover exchanges.&lt;/p&gt;

&lt;p&gt;An exchange, a service where people buy and sell cryptocurrency, sends withdrawals from shared accounts. Those accounts appear as funders in our data. One had paid &lt;strong&gt;33,747 wallets&lt;/strong&gt;. Walking through it made strangers look like collaborators.&lt;/p&gt;

&lt;p&gt;We labelled wallets that funded more than 200 others &lt;strong&gt;hubs&lt;/strong&gt;. There were 89. We removed their incoming funding links and stopped queries from walking through them. You can see that a payment came from an exchange-like wallet; you can't use it as a bridge to thousands of other creators.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa31enq8dhvaumra9xj54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa31enq8dhvaumra9xj54.png" alt="Before and after: on the left, one glowing hub connects seven groups of wallets; on the right, the hub is a dashed box and every trail stops at it, leaving the groups separate" width="800" height="446"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Day 1's biggest lesson. A hub is a bridge to nowhere, so we turned it into a wall.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We tried distinguishing exchanges from groups launching lots of coins by the share of funded wallets that became creators. Our funding data covered creators' funders, so even the biggest hub showed 80% creators. We'd selected the answer with our sample. We kept the 200-wallet rule and documented the limit.&lt;/p&gt;

&lt;p&gt;With hubs excluded, &lt;code&gt;algo.WCC&lt;/code&gt;, the connected-components procedure, found &lt;strong&gt;6,556 rings&lt;/strong&gt;: groups joined by funding and coin creation, with at least two creators. Of 3,900 multi-creator groups our collector had found by other means, 3,824 fell inside a single graph ring. That gave us a check against an existing method.&lt;/p&gt;
&lt;h2&gt;
  
  
  Day 2: we made Claude cite its sources
&lt;/h2&gt;

&lt;p&gt;We asked Claude to explain a coin's history. Then we had to decide how much of its answer we could let through.&lt;/p&gt;

&lt;p&gt;We gave it nine tools for looking up coins, following payments and finding shared connections, including early buyers and social accounts. Each runs fixed, read-only Cypher. Claude chooses tools and writes prose; it never writes the database query. It gets up to eight model/tool rounds, with several calls allowed in a round.&lt;/p&gt;

&lt;p&gt;The tools return &lt;strong&gt;evidence IDs&lt;/strong&gt;, labels such as E1 and E2 that identify the nodes and links behind a result. Every factual sentence must cite evidence of the matching kind. &lt;strong&gt;The server rejects sentences that don't.&lt;/strong&gt; Explicit server-owned context and refusal text are exceptions.&lt;/p&gt;

&lt;p&gt;An invented ID gets removed. So does a citation from the wrong tool: a payment result cannot support a claim about a reused social account. A sentence covering both topics needs both kinds of evidence. After those checks, the server deletes factual sentences with no valid citation and adds its own computed context line.&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;checks sourcing, not truth&lt;/strong&gt;. A made-up launch count can pass if Claude attaches a valid coin-lookup ID. The checker doesn't establish that a number matches the result or that the sentence names the right subject. You still need to inspect the evidence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1koov8e07vz3jakl61b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft1koov8e07vz3jakl61b.png" alt="The agent loop: a question goes to Claude, which calls nine read-only tools, drafts an answer with evidence ids, passes a citation check, and reaches the app; a fixed dossier is the fallback" width="800" height="446"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The model chooses the tools and the words. The checker enforces citation IDs and matching evidence kinds; the map lets you inspect the evidence.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Without an AI key, or if the call fails, server templates produce a fixed summary from the same tools.&lt;/p&gt;

&lt;p&gt;That evening we tried a coin called &lt;strong&gt;METHU&lt;/strong&gt;. Its creator had launched one coin. We followed the payment to that creator and found that the payer had funded &lt;strong&gt;71 other creators&lt;/strong&gt;. Each had launched one coin. Across those 72 coins, none had "graduated": raised enough to move to a real trading pool, a rare outcome in our data. That's what we found in our snapshot, which ends on 14 October 2026 at 18:45 UTC.&lt;/p&gt;

&lt;p&gt;Looking at METHU's creator alone, we'd have missed the other 71. We wanted someone reading that answer to be able to check the same path.&lt;/p&gt;

&lt;p&gt;We prepared 30 evaluation questions, including six requiring refusal or "no evidence". The scripted run passed all 30; it tested the plumbing, not Claude's judgement. We tried 10 questions on the live site. All ten answers used the expected tools, valid citations and no trading advice. Only five stayed within five sentences. We added a five-sentence cap, plus the closing line.&lt;/p&gt;
&lt;h2&gt;
  
  
  Day 3: tap E4 and follow the payment yourself
&lt;/h2&gt;

&lt;p&gt;Paste a coin into Sniff and you see the investigation steps arrive: checking who made it, who paid them, who else that payer funded. On Day 3 we put a map beside the answer.&lt;/p&gt;

&lt;p&gt;Tap &lt;strong&gt;E4&lt;/strong&gt; and the map dims the other nodes, leaving the wallets and coins behind that evidence highlighted. You can follow the connection yourself without reading a query result table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forjk7mgk0umtytwpw92e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forjk7mgk0umtytwpw92e.jpg" alt="The Sniff app on METHU: the coin card on the left shows one payer who also paid 71 other creators, none graduated; on the right the map highlights the payer and the 71 other creators for evidence E4" width="800" height="488"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;METHU, with evidence E4 selected: one payer, 71 other creators, 0 graduations. (Wallet addresses blurred for this post.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Exchange-like wallets have dashed outlines where trails stop. The coin card reads the graph without AI, and the interface works on a phone. We expose the nine investigation tools over MCP, a protocol agents use to call tools. Connect your own client with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http sniff https://sniff.quantbase.live/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Day 4: memory, and a company brain
&lt;/h2&gt;

&lt;p&gt;Ask a follow-up about the same coin and we shouldn't have to start from scratch. On the last day, we added two FalkorDB graphs: saved investigations in &lt;code&gt;memory&lt;/code&gt;, and QuantBase's public documents in &lt;code&gt;brain&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;On &lt;a href="https://sniff.quantbase.live/memory?entity=coin:3LaVxn1Pp5gDjJZgGrpbQ8gRKj7GxgPE8cjF62Svpump" rel="noopener noreferrer"&gt;/memory&lt;/a&gt;, you can see four METHU findings. Follow-ups reuse recent results from the same session. Other agents can read findings across sessions through MCP and add observations. Each finding keeps its source tool and timestamp. Agent names are self-declared, and notes remain unverified.&lt;/p&gt;

&lt;p&gt;For the company brain, we loaded 12 public documents. Ask "How does QuantBase handle paper vs live?" on &lt;a href="https://sniff.quantbase.live/brain" rel="noopener noreferrer"&gt;/brain&lt;/a&gt;, then open a [B#] citation to read the source section. Paper trading means trying a strategy with play money; live trading uses real money. We combine graph lookup with full-text search. Today's source-only graph connects documents, sections and named products or policies; it contains no extracted relationships between entities. Reloading changed sources retires old sections. Our &lt;a href="https://github.com/avasis-ai/quant-agent/blob/main/docs/GRAPH.md" rel="noopener noreferrer"&gt;graph documentation&lt;/a&gt; covers the privacy checks and the optional richer builder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fabmwrgcm597vgjh63qbo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fabmwrgcm597vgjh63qbo.png" alt="Two small graphs: on the left, Session ASKED Question FOUND Evidence ABOUT Coin or Wallet, with a Note from another agent; on the right, Doc, Section, Decision and Finding linked by PART_OF, MENTIONS and SUPPORTS" width="800" height="446"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Day 4 architecture: the live brain uses MENTIONS/PART_OF; SUPPORTS in this illustration is an optional AI-builder capability. Agent notes are attributed observations, labelled "agent note · not verified".&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Then we tested whether the graph could predict anything
&lt;/h2&gt;

&lt;p&gt;We took 23,408 graduated coins and tried predicting how they did afterwards. We run trading research on this data too, and needed to know whether these connections helped.&lt;/p&gt;

&lt;p&gt;We used only information available at graduation: the payer's other creators, payments two steps back, reused social accounts and shared early buyers. We trained on older coins and tested on the newest third.&lt;/p&gt;

&lt;p&gt;In isolation, we found associations. Coins reusing a social account from another creator's coin were 18 percentage points less likely to be alive an hour later.&lt;/p&gt;

&lt;p&gt;Then we included the first minutes of trading. &lt;strong&gt;In this test, the graph added no measurable predictive value.&lt;/strong&gt; The change in AUC, a measure of how well the model ranks outcomes, stayed within ±0.01. We couldn't turn the connections we'd found into a demonstrated improvement over those early trading signals.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe63bompzpvtmxn4uisxv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe63bompzpvtmxn4uisxv.jpg" alt="A small dog carrying a lantern on a mountain path at dusk; the light shows the footprints and coins behind it clearly while the path ahead disappears into fog" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Sniff can light up where a coin came from. It can't see through the fog ahead, and it doesn't pretend to.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That result set the boundary for Sniff. We describe recorded history and show the evidence. We don't recommend buying or selling, label coins "safe" or "scam", or promise a return. Answers close with &lt;em&gt;history, not a prediction&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;METHU's 72 connected launches remain worth examining. You can check their history without treating it as a forecast for the next coin.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we liked in FalkorDB, and where we tripped
&lt;/h2&gt;

&lt;p&gt;Changing the hub rule meant rebuilding the graph. With a 30-second bulk load, we could afford to try again. That was our favourite part of working with FalkorDB 6.0.2.&lt;/p&gt;

&lt;p&gt;We used range indexes for node keys and a full-text index for coin names and symbols. &lt;code&gt;algo.WCC&lt;/code&gt; found the rings in 2.9 seconds. For connections between two things, we used &lt;code&gt;algo.SPpaths&lt;/code&gt;, filtering out hubs and social handles shared across platform-sized groups. &lt;code&gt;GRAPH.RO_QUERY&lt;/code&gt; kept investigation queries read-only, with per-query timeouts.&lt;/p&gt;

&lt;p&gt;We also lost time following documentation that didn't match our running server. Procedure names varied between pages. On 6.0.2, the names included &lt;code&gt;algo.WCC&lt;/code&gt;, &lt;code&gt;algo.BFS&lt;/code&gt;, &lt;code&gt;algo.pageRank&lt;/code&gt;, &lt;code&gt;algo.labelPropagation&lt;/code&gt; and &lt;code&gt;algo.SPpaths&lt;/code&gt;. We checked them with &lt;code&gt;CALL dbms.procedures()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The documented &lt;code&gt;db.idx.fulltext.createNodeIndex('Coin','name','symbol')&lt;/code&gt; failed. &lt;code&gt;CREATE FULLTEXT INDEX FOR (c:Coin) ON (c.name, c.symbol)&lt;/code&gt; worked. &lt;code&gt;WITH&lt;/code&gt; projections needed &lt;code&gt;AS&lt;/code&gt; aliases. Query timeouts couldn't exceed the server's &lt;code&gt;TIMEOUT_MAX&lt;/code&gt;, 15 seconds by default. &lt;code&gt;sum()&lt;/code&gt; returned floats, so we cast counts to integers.&lt;/p&gt;

&lt;p&gt;And some coin names were a backslash. The bulk loader uses that as its default escape character, so we had to pass &lt;code&gt;-x none&lt;/code&gt;. Of course a database import for joke coins would break on a joke-sized name.&lt;/p&gt;

&lt;p&gt;We'd love a generated procedure reference per version, full-text docs that lead with the working &lt;code&gt;CREATE&lt;/code&gt; syntax, and a loader warning for lone escape characters. Those changes would have saved us time. The fast rebuilds let us keep experimenting through the rough edges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this goes next
&lt;/h2&gt;

&lt;p&gt;Open METHU, select a citation, then visit memory. You can follow a finding from a payment through to something another agent can reuse.&lt;/p&gt;

&lt;p&gt;We're building this research into QuantBase, where users can try trading strategies with play money. The demo is live at &lt;a href="https://sniff.quantbase.live" rel="noopener noreferrer"&gt;sniff.quantbase.live&lt;/a&gt;; the homepage still describes the dashboard integration as in development.&lt;/p&gt;

&lt;h2&gt;
  
  
  From a pixel dog to a product
&lt;/h2&gt;

&lt;p&gt;The day before the event began, sniff.quantbase.live was a coming-soon page with one thing on it: a small animated pixel dog, sniffing a coin, on a 3.2-second loop.&lt;/p&gt;

&lt;p&gt;Four days later, you can follow a payer across 72 launches, check the agent's sources on a map and carry findings into another session. We also have a prediction test that gave us a reason to narrow our claims. We're taking that work into QuantBase, with the dog still out front.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy4nsr1rj44nupoke6vj6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy4nsr1rj44nupoke6vj6.jpg" alt="A small dog sitting on a cliff at sunrise, looking over a valley with a lit town, while ember sparks draw a pixel-art dog in the sky" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;From a pixel dog on a coming-soon page to a product. History, not a prediction.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Paste METHU's address into the app, or choose its example, and follow the payer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App:&lt;/strong&gt; &lt;a href="https://sniff.quantbase.live" rel="noopener noreferrer"&gt;sniff.quantbase.live&lt;/a&gt;. Try the METHU example.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your own agent:&lt;/strong&gt; &lt;code&gt;claude mcp add --transport http sniff https://sniff.quantbase.live/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QuantBase:&lt;/strong&gt; &lt;a href="https://quantbase.live" rel="noopener noreferrer"&gt;quantbase.live&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/avasis-ai/quant-agent" rel="noopener noreferrer"&gt;github.com/avasis-ai/quant-agent&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built in four days by team QuantBase, on FalkorDB, Claude and a lot of pump.fun history. Nothing here is financial advice.&lt;/p&gt;

</description>
      <category>falkordb</category>
      <category>graphdatabase</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Who is behind this meme coin? Building Sniff on a graph</title>
      <dc:creator>Abhay Nayak</dc:creator>
      <pubDate>Sat, 17 Oct 2026 11:28:24 +0000</pubDate>
      <link>https://dev.to/quantbase/who-is-behind-this-meme-coin-building-sniff-on-a-graph-4nnc</link>
      <guid>https://dev.to/quantbase/who-is-behind-this-meme-coin-building-sniff-on-a-graph-4nnc</guid>
      <description>&lt;p&gt;&lt;em&gt;By team Quant Agent, for WeMakeDevs × FalkorDB Graph Hacks, October 2026&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;More than ten thousand meme coins launch on pump.fun every day. Almost all of them die within hours. When a new one shows up on your screen, the question people actually ask isn't "will it go up?", because nobody can answer that honestly. It's simpler: &lt;strong&gt;who made this, and what happened to the last things they made?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question is hard to answer by hand. The wallet that launched the coin is usually brand new. The real trail runs through whoever paid that wallet to launch it, and through whoever else that payer has paid. That takes two or three hops of "who sent money to whom", across hundreds of thousands of wallets.&lt;/p&gt;

&lt;p&gt;So we built &lt;strong&gt;Sniff&lt;/strong&gt;: paste a coin, and an AI agent walks a graph of on-chain history and answers in a few plain sentences. Every sentence links to the exact part of the graph that proves it.&lt;/p&gt;

&lt;p&gt;Try it: &lt;a href="https://sniff.quantbase.live" rel="noopener noreferrer"&gt;https://sniff.quantbase.live&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/YMQKpynEsI0" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5uc7cgssqz19smqv6psd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5uc7cgssqz19smqv6psd.jpg" alt="Sniff's answer, with each claim's evidence highlighted on the map" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a graph
&lt;/h2&gt;

&lt;p&gt;We already had the raw material. Our QuantBase collector records public pump.fun data: launches, the wallet behind each one, who funded those wallets, the wallets that bought in the first seconds, and the social links each coin lists. Before the event it lived in Postgres tables, and every question we asked of it turned into a tower of self-joins.&lt;/p&gt;

&lt;p&gt;The questions are all shaped like paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who paid the creator? → Who else did that wallet pay? → What did &lt;em&gt;they&lt;/em&gt; launch? → Did any of it graduate?&lt;/li&gt;
&lt;li&gt;Do these two coins share a funder, an early buyer, or a Twitter account?&lt;/li&gt;
&lt;li&gt;Which wallets form one connected group of launchers?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In FalkorDB each of these is a single Cypher pattern. We loaded 632,339 pump.fun launches, 424,007 wallets and about 1.5 million relationships (CREATED, FUNDED, SNIPED, LINKS) with the bulk loader in &lt;strong&gt;30 seconds&lt;/strong&gt;. The questions that had been painful became one-liners. Rings of connected launchers come from &lt;code&gt;algo.WCC&lt;/code&gt;, and "how are these two connected?" comes from &lt;code&gt;algo.SPpaths&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Surprise 1: hubs make everything link to everything
&lt;/h2&gt;

&lt;p&gt;The first version of the graph said every coin was connected to every other coin within four hops, which is true and useless. The reason was exchanges. When a creator withdraws SOL from an exchange, the exchange's hot wallet shows up as their "funder", and that one wallet funds tens of thousands of creators.&lt;/p&gt;

&lt;p&gt;We call these wallets &lt;strong&gt;hubs&lt;/strong&gt;: any wallet that funded more than 200 others. There were 89 of them. They get their own label, keep a note of how many wallets they funded, and &lt;strong&gt;no query is allowed to walk through them&lt;/strong&gt;. A funding trail that reaches a hub stops there and says "this came from an exchange-like wallet, which tells us nothing about who is behind it."&lt;/p&gt;

&lt;p&gt;We tried to be cleverer and tell exchanges apart from big launch farms by what share of their wallets went on to create coins. It didn't work, because our funding data only covers wallets that created coins. The biggest hub funded 33,747 wallets and 80% of them were creators, simply because those were the only wallets we had looked up. So we kept the simple rule, wrote down why, and moved on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Surprise 2: the docs and the database disagreed
&lt;/h2&gt;

&lt;p&gt;FalkorDB 6.0.2 was a pleasure to work with, but a few things in the docs didn't match the running server. Here's what we hit, so you don't have to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Procedure names:&lt;/strong&gt; they differ between pages. On 6.0.2 they are &lt;code&gt;algo.WCC&lt;/code&gt;, &lt;code&gt;algo.BFS&lt;/code&gt;, &lt;code&gt;algo.pageRank&lt;/code&gt;,
&lt;code&gt;algo.labelPropagation&lt;/code&gt; and &lt;code&gt;algo.SPpaths&lt;/code&gt;. &lt;code&gt;CALL dbms.procedures()&lt;/code&gt; is the source of truth; check it first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-text index:&lt;/strong&gt; the three-argument &lt;code&gt;db.idx.fulltext.createNodeIndex('Coin','name','symbol')&lt;/code&gt; from the
docs is refused. &lt;code&gt;CREATE FULLTEXT INDEX FOR (c:Coin) ON (c.name, c.symbol)&lt;/code&gt; works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;WITH&lt;/code&gt;:&lt;/strong&gt; projections need an &lt;code&gt;AS&lt;/code&gt; alias.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeouts:&lt;/strong&gt; a query timeout can't go above the server's &lt;code&gt;TIMEOUT_MAX&lt;/code&gt; (15 s by default).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bulk loader:&lt;/strong&gt; its default escape character is a backslash, and meme coins are sometimes literally named
&lt;code&gt;\&lt;/code&gt;. Pass &lt;code&gt;-x none&lt;/code&gt; and let your CSV writer double quotes instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these took long once we knew, and they're all written down in the repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Surprise 3: one payer, 72 creators, zero graduations
&lt;/h2&gt;

&lt;p&gt;The first time the whole thing ran end to end, we asked about a coin called METHU. Its creator wallet had launched exactly one coin, which on its own looks like a first-time creator. One hop back told a different story.&lt;/p&gt;

&lt;p&gt;The wallet that paid METHU's creator, 0.009 SOL, had paid &lt;strong&gt;71 other brand-new wallets&lt;/strong&gt;. Each launched exactly one coin. &lt;strong&gt;None of the 72 coins graduated.&lt;/strong&gt; In the graph it's one funder with 72 spokes, each ending in a dead coin.&lt;/p&gt;

&lt;p&gt;That's the whole idea of Sniff in one picture. The creator alone looks clean; the payer is the story. And you can only see it if the data is shaped like the question.&lt;/p&gt;

&lt;h2&gt;
  
  
  An agent whose citations are checked
&lt;/h2&gt;

&lt;p&gt;The agent is Claude with nine tools, each a fixed, read-only Cypher query: coin lookup, funding trail, sibling creators, shared early buyers, shared socials, rings, shortest connection, top operators, and search. Claude decides which tools to call, up to eight, and writes the answer. It never writes Cypher itself.&lt;/p&gt;

&lt;p&gt;Every tool result carries &lt;strong&gt;evidence ids&lt;/strong&gt;: E1, E2 and so on. The answer has to end each sentence with the id that proves it. Then we check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A cited id has to be one a tool really returned.&lt;/li&gt;
&lt;li&gt;It has to come from a tool that can show that kind of claim. A sentence about reused socials can't cite
the funding tool.&lt;/li&gt;
&lt;li&gt;A sentence left with no valid citation is deleted. A shorter answer beats an unsupported one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the app, tapping a citation lights up exactly those wallets and coins on the map. If there's no AI key, or the AI call fails, the same tools produce a fixed summary instead, so the facts never depend on the model.&lt;/p&gt;

&lt;p&gt;We scored it on 30 questions, including six it should refuse ("will this pump?", "is it safe?", made-up addresses). On the live site all 10 questions we spent real calls on picked the right tools, cited valid evidence and stayed within the no-advice rule. What failed was length: half the answers ran past five sentences, so answers are now capped at five.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest part: it explains, it doesn't predict
&lt;/h2&gt;

&lt;p&gt;We also run trading research on the same data, so we asked the uncomfortable question: do these graph signals help predict which coins do well after graduating?&lt;/p&gt;

&lt;p&gt;We built the features strictly as they would have been known at the moment each coin graduated: how many other creators the funder paid, two-hop funding, reused socials, shared early buyers. Then we tested them on 23,408 graduated coins, training on the older ones and testing on the newest third.&lt;/p&gt;

&lt;p&gt;On their own, the signals mean something. Coins whose social account had been used on another creator's coin were 18 points less likely to still be alive an hour later. But once you add what anyone can already see in a coin's first couple of minutes of trading, the graph adds &lt;strong&gt;nothing measurable&lt;/strong&gt;: the change in predictive accuracy was within ±0.01. Whatever the graph knows has already shown up in the price.&lt;/p&gt;

&lt;p&gt;So Sniff doesn't say "safe" or "scam", and it never says buy or sell. It tells you who is behind a coin and what their other coins did, with receipts, and ends every answer with the same line: &lt;em&gt;history, not a prediction.&lt;/em&gt; We think that's the honest version of this product, and the useful one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App:&lt;/strong&gt; &lt;a href="https://sniff.quantbase.live" rel="noopener noreferrer"&gt;https://sniff.quantbase.live&lt;/a&gt; (try the METHU example).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your own agent:&lt;/strong&gt; &lt;code&gt;claude mcp add --transport http sniff https://sniff.quantbase.live/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/avasis-ai/quant-agent" rel="noopener noreferrer"&gt;https://github.com/avasis-ai/quant-agent&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built in four days on FalkorDB, Claude and a lot of pump.fun history.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>database</category>
      <category>solana</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
