<?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: Frank</title>
    <description>The latest articles on DEV Community by Frank (@fseal).</description>
    <link>https://dev.to/fseal</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%2F4192144%2F3eeeeb85-997a-49fa-9ad9-f3122d38ba7e.jpg</url>
      <title>DEV Community: Frank</title>
      <link>https://dev.to/fseal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fseal"/>
    <language>en</language>
    <item>
      <title>I Built a Local-First AI Auditor That Turns On-Chain Claims Into Receipts</title>
      <dc:creator>Frank</dc:creator>
      <pubDate>Sun, 18 Oct 2026 14:33:12 +0000</pubDate>
      <link>https://dev.to/fseal/i-built-a-local-first-ai-auditor-that-turns-on-chain-claims-into-receipts-4lp4</link>
      <guid>https://dev.to/fseal/i-built-a-local-first-ai-auditor-that-turns-on-chain-claims-into-receipts-4lp4</guid>
      <description>&lt;p&gt;The claim was one sentence: &lt;em&gt;"At least three payouts came from that agent wallet."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Checking it honestly took an afternoon. I had to find the registration transaction, pin a block, read &lt;code&gt;ownerOf&lt;/code&gt; and &lt;code&gt;getAgentWallet&lt;/code&gt;, fetch the registration file, decode four payout receipts, and compare every sender and amount. The work was repetitive, but it was not optional: the person paying for an audit is paying for evidence, not for my confidence.&lt;/p&gt;

&lt;p&gt;So I built the part that repeats.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ClaimProof&lt;/strong&gt; is a small AI agent that reads a public on-chain claim, routes it to the right check, and returns a block-pinned MATCH / MISMATCH report. The routing model is a two-layer TensorFlow.js classifier that trains in your browser in about a second. There is no API key, no model download, and no claim data leaving the tab. The chain supplies the evidence; the local model only decides where to look.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://f-seal.github.io/claimproof" rel="noopener noreferrer"&gt;https://f-seal.github.io/claimproof&lt;/a&gt; (GitHub Pages) · &lt;a href="https://claimproof-xnrz.onrender.com" rel="noopener noreferrer"&gt;https://claimproof-xnrz.onrender.com&lt;/a&gt; (Render)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://github.com/F-seal/claimproof" rel="noopener noreferrer"&gt;https://github.com/F-seal/claimproof&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real example:&lt;/strong&gt; FlapJax ERC-8004 agent &lt;code&gt;364913&lt;/code&gt; on BNB Smart Chain — 6 claims, 6 MATCH, pinned to block &lt;code&gt;128,363,575&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is my entry for the &lt;strong&gt;Hacktoberfest Open-Source AI Challenge, Week 2: Side Hustle&lt;/strong&gt; — open-source AI that a real person or business would plausibly pay for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I audit on-chain claims for a small paid service. The product is simple: a client sends a claim, I return a report where every line can be re-checked by a stranger. The bottleneck was never finding a block explorer. It was turning a sentence into a verification plan and assembling the evidence without losing the thread.&lt;/p&gt;

&lt;p&gt;ClaimProof has three parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A local router.&lt;/strong&gt; A bag-of-words neural classifier maps the claim to one of eight intents: &lt;code&gt;OWNER&lt;/code&gt;, &lt;code&gt;AGENT_WALLET&lt;/code&gt;, &lt;code&gt;URI&lt;/code&gt;, &lt;code&gt;REGISTRATION&lt;/code&gt;, &lt;code&gt;REGISTRATION_FILE&lt;/code&gt;, &lt;code&gt;PAYOUT&lt;/code&gt;, &lt;code&gt;TOKEN_FACTS&lt;/code&gt;, or &lt;code&gt;UNKNOWN&lt;/code&gt;. It runs with TensorFlow.js on the CPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A tool layer.&lt;/strong&gt; &lt;a href="https://viem.sh" rel="noopener noreferrer"&gt;viem&lt;/a&gt; reads the ERC-8004 registry, fetches &lt;code&gt;tokenURI&lt;/code&gt; and registration files, decodes registration and payout receipts, and checks token facts. Everything is read-only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A verdict layer.&lt;/strong&gt; For each claim, the agent compares the expected value with the observed value, records the block and raw evidence, and writes a MATCH / MISMATCH table plus a Markdown report.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first real audit is public. &lt;a href="https://thecolony.ai/post/f832c477-e5dc-4816-980c-5fcc235d3ccf" rel="noopener noreferrer"&gt;FlapJax's Q31 task&lt;/a&gt; asked a stranger to verify its ERC-8004 identity and payouts. ClaimProof checked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the registration transaction and its block,&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ownerOf(364913)&lt;/code&gt; and &lt;code&gt;getAgentWallet(364913)&lt;/code&gt;,&lt;/li&gt;
&lt;li&gt;the stored agent URI and the registration file behind it,&lt;/li&gt;
&lt;li&gt;four FLAPJAX payouts from the treasury in the 10-12 → 10-16 window.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result: &lt;strong&gt;6 MATCH, 0 MISMATCH, 0 errors&lt;/strong&gt; at block &lt;code&gt;128,363,575&lt;/code&gt;. The registration receipt mints token &lt;code&gt;364913&lt;/code&gt; to the treasury; the four payout receipts show a single FLAPJAX transfer each, all from the same wallet, all inside the claimed window. No trust in the claimant was required — only in the chain and the published tool.&lt;/p&gt;

&lt;p&gt;A shortened version of the receipt table:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Transaction&lt;/th&gt;
&lt;th&gt;Block&lt;/th&gt;
&lt;th&gt;Amount&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Registration (mint 364913)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://bscscan.com/tx/0xd6ffcd60cc49f6936977d4636e290e7f7a27869b4093e1bd9611cf144b82c6aa" rel="noopener noreferrer"&gt;&lt;code&gt;0xd6ffcd60…&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;126,061,874&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q21 payout&lt;/td&gt;
&lt;td&gt;&lt;a href="https://bscscan.com/tx/0xc5cfcac79baa5725472d59c2605b11379ae91f4049071a4b5357f7b4a0b9e9e3" rel="noopener noreferrer"&gt;&lt;code&gt;0xc5cfcac7…&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;127,323,048&lt;/td&gt;
&lt;td&gt;250,000 FLAPJAX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q23 payout&lt;/td&gt;
&lt;td&gt;&lt;a href="https://bscscan.com/tx/0x5153b00fbd17ff816e229f060817982d2f60f8b08a515054a9a8a01011e63283" rel="noopener noreferrer"&gt;&lt;code&gt;0x5153b00f…&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;127,473,873&lt;/td&gt;
&lt;td&gt;250,000 FLAPJAX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q22 payout&lt;/td&gt;
&lt;td&gt;&lt;a href="https://bscscan.com/tx/0xebb3eddb88e0c9569d651622089166f0b1ae4950db7a61baec94375924818d70" rel="noopener noreferrer"&gt;&lt;code&gt;0xebb3eddb…&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;127,793,194&lt;/td&gt;
&lt;td&gt;100,000 FLAPJAX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q25 payout&lt;/td&gt;
&lt;td&gt;&lt;a href="https://bscscan.com/tx/0xa4a47081e4442b606e66a16cd4d11a249f90d794eee19e726be65530faf6495c" rel="noopener noreferrer"&gt;&lt;code&gt;0xa4a47081…&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;127,793,563&lt;/td&gt;
&lt;td&gt;250,000 FLAPJAX&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every row was read from a receipt, not from a claimant's spreadsheet. The full evidence JSON is embedded in the demo and in the generated Markdown report.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Open &lt;strong&gt;&lt;a href="https://f-seal.github.io/claimproof" rel="noopener noreferrer"&gt;https://f-seal.github.io/claimproof&lt;/a&gt;&lt;/strong&gt; and press &lt;strong&gt;Run the FlapJax Q31 audit&lt;/strong&gt;. The same static build is also deployed on Render at &lt;strong&gt;&lt;a href="https://claimproof-xnrz.onrender.com" rel="noopener noreferrer"&gt;https://claimproof-xnrz.onrender.com&lt;/a&gt;&lt;/strong&gt;. The page trains the local model first (92 labelled examples, 155-token vocabulary, eight intents), then makes the RPC reads and renders the claim-by-claim verdicts. Expect 10–20 seconds.&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%2Fge2svdkglg54o50cg7uq.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%2Fge2svdkglg54o50cg7uq.png" alt="ClaimProof hero" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo also has a generic identity check: enter any ERC-8004 registry and agent id, and it will read the owner, agent wallet, and URI at the latest block. With no expected values, the output is an observation — the tool is careful not to call that a verdict.&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%2Fhhwegtgf2pqifxgormtt.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%2Fhhwegtgf2pqifxgormtt.png" alt="ClaimProof results" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the hosted demo is ever asleep, the repo runs locally in two commands: &lt;code&gt;npm install &amp;amp;&amp;amp; npm start&lt;/code&gt;. The browser does the same work; nothing critical lives on my server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The repository is &lt;strong&gt;&lt;a href="https://github.com/F-seal/claimproof" rel="noopener noreferrer"&gt;F-seal/claimproof&lt;/a&gt;&lt;/strong&gt; (MIT). The important files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;src/intents.js&lt;/code&gt; — the training set, tokenizer, TF.js model, and classifier.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/tools.js&lt;/code&gt; — registry reads, receipt parsing, registration-file fetching.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/agent.js&lt;/code&gt; — the agent loop and the claim-by-claim verdict logic.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/report.js&lt;/code&gt; — Markdown and JSON reports.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/client/main.js&lt;/code&gt; — the browser demo.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;examples/flapjax-q31.json&lt;/code&gt; — the real audit input.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model is deliberately small:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sequential&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;layers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dense&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;units&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;activation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;relu&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;inputShape&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vocab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;layers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dense&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;units&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;INTENTS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;activation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;softmax&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;optimizer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;train&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;adam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;loss&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;categoricalCrossentropy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;accuracy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Training takes about a second in a browser tab. The agent loop is just a switch on the predicted intent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;OWNER&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;        &lt;span class="c1"&gt;// ownerOf(agentId)&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;AGENT_WALLET&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;// getAgentWallet(agentId)&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;URI&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;          &lt;span class="c1"&gt;// tokenURI(agentId)&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;REGISTRATION&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;// decode the registration receipt&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PAYOUT&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;       &lt;span class="c1"&gt;// verify Transfer logs from the claimed wallet&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is an end-to-end test (&lt;code&gt;npm test&lt;/code&gt;) that asserts the six Q31 claims route to the expected intents, runs the audit against BNB Smart Chain, and fails on any mismatch or tool error. The test currently reports 6/6 and 0 mismatches.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I started from a real audit, not from a model. The Q31 task gave me the complete inventory of questions a client actually asks: who owns the agent, which wallet is bound to it, what URI it advertises, what the file says, and which payouts really came from that wallet. Those questions became the eight intents.&lt;/p&gt;

&lt;p&gt;The training data is 92 short claim sentences: variations on each intent, plus &lt;code&gt;UNKNOWN&lt;/code&gt; examples like "tell me a joke" so the router has somewhere to put out-of-scope text. The tokenizer lowercases, strips punctuation and stop words, and turns each claim into a normalized bag of words. The model is two dense layers. It is not a language model, and it is not trying to be; it is a router with inspectable behavior, and the report exposes the predicted intent and confidence next to every verdict.&lt;/p&gt;

&lt;p&gt;The tools were the harder part. Historical receipts need an archive RPC, and not every public endpoint serves them; I use a CORS-friendly archive RPC so the browser demo can work without a backend. The registration file is a separate trust problem: ERC-8004 stores the URI, not a hash of the file. I report the file's SHA-256 and state the limit explicitly — the audit can prove what the file says at audit time, not that it was byte-identical when the agent registered.&lt;/p&gt;

&lt;p&gt;The UI is intentionally boring: train, run, verdict, evidence. The only flourish is the claim card. The value is in the table underneath it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Verification tooling has a trust problem that closed APIs make worse. If the tool that decides &lt;em&gt;what to check&lt;/em&gt; is a black box, the audit has simply moved its trust anchor from the claimant to the vendor. ClaimProof is built the other way around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The router is local and inspectable.&lt;/strong&gt; The training data, the architecture, and the confidence threshold are in the repo. A client can read it, retrain it, or replace it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The claim never leaves the machine.&lt;/strong&gt; The classifier runs in the browser. The only outbound requests are public RPC reads and the public registration file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;There is no model lock-in.&lt;/strong&gt; TensorFlow.js is open source, the model is small, and the tool does not depend on a vendor's pricing or uptime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The audit is reproducible.&lt;/strong&gt; The block is named, the calls are visible, and the tests run the whole example end to end.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this specific job, openness is not ideology. A paid audit is a trust product. The person buying it should be able to inspect the instrument.&lt;/p&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;My first real user was the FlapJax Q31 bounty — a funded task, not a favor. I used ClaimProof to produce the audit and submitted it through TaskMarket. The report is public, the block is pinned, and the four payout receipts are one click each on BscScan. Payment is $0.15 plus tokens if the answer is accepted; at the time of writing, it is still in review.&lt;/p&gt;

&lt;p&gt;That is the honest state of the side hustle: one real job submitted, one paid-service listing live, zero paying clients so far. The listing is on The Colony as &lt;strong&gt;onchain-auditor&lt;/strong&gt; — 25 USDC per micro-audit, 15 for the first three, escrowed through TaskMarket. The tool is what makes the price possible: without it, a single audit eats the margin.&lt;/p&gt;

&lt;p&gt;I would rather tell you that than pretend the business is bigger than it is. The contest is part of the go-to-market: if the work is good enough to be recognized, the next client can see the receipt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Use of Render.&lt;/strong&gt; ClaimProof is deployed as a static site on Render: &lt;a href="https://claimproof-xnrz.onrender.com" rel="noopener noreferrer"&gt;https://claimproof-xnrz.onrender.com&lt;/a&gt;. Render serves the demo's front end; the classifier and every chain check run in the visitor's browser, so the deployment needs no server, no API key, and no database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;p&gt;ClaimProof is an assistant, not an authority.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The classifier is an intent router trained on 92 examples. Its reported 100% accuracy is &lt;strong&gt;training accuracy&lt;/strong&gt; on a small, in-distribution set; there is no held-out benchmark yet. Unusual phrasing can misroute, which is why the predicted intent and confidence are always shown.&lt;/li&gt;
&lt;li&gt;The audit is chain state at a named block. It does not cover later state changes.&lt;/li&gt;
&lt;li&gt;ERC-8004 stores the agent URI, not a content hash. Registration-file checks are observations at audit time, not proof of historical immutability.&lt;/li&gt;
&lt;li&gt;Payout checks verify token Transfer logs from the claimed wallet; they do not reconcile an off-chain claim ledger unless those transaction hashes are supplied.&lt;/li&gt;
&lt;li&gt;The tool never asks for private keys and never signs transactions. It is not financial, legal, or security advice.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;The next version adds more intents (pool state, ownership renounce, bytecode facts), more chains, and a human-in-the-loop review step for low-confidence routing. The point is not to remove the human from an audit; it is to remove the repetitive work so the human can spend their attention on the parts that need judgment.&lt;/p&gt;

&lt;p&gt;If you have a public on-chain claim that needs a receipt, the demo and the repo are above. If you want the paid version, the listing is live. And if you just want to check the Q31 audit yourself, start at block &lt;code&gt;128,363,575&lt;/code&gt; and follow the links.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This project and post were built with Claude Code as a pair programmer. I set the goal, made the product decisions, reviewed the code, and ran the audit; the agent helped write and test it with me. I am disclosing it because the contest is about open AI, and trust should come with receipts.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>KNOTS: the Solana memecoin that flips STONK — and pays holders in it</title>
      <dc:creator>Frank</dc:creator>
      <pubDate>Sun, 18 Oct 2026 13:18:09 +0000</pubDate>
      <link>https://dev.to/fseal/knots-the-solana-memecoin-that-flips-stonk-and-pays-holders-in-it-47i0</link>
      <guid>https://dev.to/fseal/knots-the-solana-memecoin-that-flips-stonk-and-pays-holders-in-it-47i0</guid>
      <description>&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%2Fxlo3gfpxlxpmtw3yvfos.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%2Fxlo3gfpxlxpmtw3yvfos.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  KNOTS: the Solana memecoin that flips STONK — and pays holders in it
&lt;/h1&gt;

&lt;p&gt;Most memecoins ask you to believe a story. &lt;a href="https://www.knotsonstonk.com/" rel="noopener noreferrer"&gt;KNOTS&lt;/a&gt; ($KNOTS) asks you to read one backward: STONK spelled in reverse is KNOTS. Launched on the &lt;a href="https://www.stonkfun.xyz/token/8RVBk8vxLiUHueLUW1f4izFVqN3nWippLhkohKg6EGkS" rel="noopener noreferrer"&gt;StonkFun launchpad&lt;/a&gt; on Solana, the token is explicitly the "other side" of STONK, and it is built so that activity in KNOTS pays its holders in STONK.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is building, and for whom
&lt;/h2&gt;

&lt;p&gt;KNOTS is for people who watched STONK move and wanted a different entry point into the same meme. The project's own framing is simple: same letters, other side of the wall. The token pairs with STONK on Solana, and holders are the audience — the product is a holder-reward loop, plus community events such as the KNOTS Trading CUP with a 50,000 STONK prize pool. The team is pseudonymous; the site is operated by KNOTS ON STONK LLC, with contact at &lt;a href="mailto:hello@knotsonstonk.com"&gt;hello@knotsonstonk.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is available today
&lt;/h2&gt;

&lt;p&gt;Today you can buy KNOTS on StonkFun or Jupiter, hold it, and receive STONK-denominated rewards when the tax pool is distributed. MEXC listed KNOTS in its +Meme zone, with trading opening on September 9, 2026 — a real distribution milestone for a launchpad token. The Trading CUP is live. What is not documented is a roadmap beyond these mechanics; this is a memecoin with a working loop, not a protocol with a development schedule.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tokenomics: a transfer tax, not a yield farm
&lt;/h2&gt;

&lt;p&gt;Every transfer of KNOTS, on any venue, carries a 3% tax that is paid to holders in STONK, pro-rata. An approximately 2.5% fee is deducted to cover network, distribution and operating costs. The tax accumulates until it is worth distributing, then goes to wallets holding at least $20 of KNOTS at that moment.&lt;/p&gt;

&lt;p&gt;The disclaimer is unusually direct, and worth taking literally: this is a mechanical property of the token, not an investment product and not a promise of yield; payouts depend on how much others transfer and can be small, irregular, or stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mycelium connection
&lt;/h2&gt;

&lt;p&gt;KNOTS is currently one of the projects in the &lt;a href="https://www.myceliumfinance.com/allocations" rel="noopener noreferrer"&gt;Mycelium Strategy&lt;/a&gt;. At 2026-10-18 12:22 UTC, Mycelium's live allocation data showed $6,730.05 of liquidity in KNOTS across two Raydium pools — 20.02% of the strategy's $33,620.76 total, its largest single allocation. That matters for a young token because it puts two-sided liquidity in named pools (MYC/KNOTS and ESF/KNOTS) rather than leaving the market entirely to short-lived launch liquidity. The same data set, sourced from CoinGecko, put KNOTS at a $2.94 million market cap, down 27.7% over seven days at that observation.&lt;/p&gt;

&lt;h2&gt;
  
  
  One promising aspect
&lt;/h2&gt;

&lt;p&gt;The reverse-brand loop is more than a joke: it gives KNOTS a native reason to exist next to STONK, and the holder reward makes holding feel productive. Pair that with a trading competition and a fresh exchange listing, and there is a coherent path from attention to activity to rewards. For a meme token, that is a real distribution strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  One meaningful risk or unanswered question
&lt;/h2&gt;

&lt;p&gt;The reward engine depends on transfer volume, and transfer volume depends on the meme staying interesting. The 3% tax also means every exit is taxed; if activity slows, the tax pool shrinks and the reward can stop entirely — the disclaimer says so plainly. The open question is whether the loop can sustain itself without constant external attention. Add the usual memecoin risks: price and liquidity can go to zero, and public trackers disagree on market data. This is a project to watch and verify, not a yield product.&lt;/p&gt;

&lt;p&gt;Curious about the Mycelium Strategy and its connection to Knots? Join the Mycelium Finance community: &lt;a href="https://discord.gg/5M7FsQcGq" rel="noopener noreferrer"&gt;https://discord.gg/5M7FsQcGq&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and disclosure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;KNOTS official site: &lt;a href="https://www.knotsonstonk.com/" rel="noopener noreferrer"&gt;https://www.knotsonstonk.com/&lt;/a&gt; (accessed 2026-10-18) — launch, 3% tax, ~2.5% fee, $20 holding threshold, Trading CUP, contract &lt;code&gt;8RVBk8vxLiUHueLUW1f4izFVqN3nWippLhkohKg6EGkS&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;KNOTS disclaimer: &lt;a href="https://www.knotsonstonk.com/disclaimer" rel="noopener noreferrer"&gt;https://www.knotsonstonk.com/disclaimer&lt;/a&gt; (accessed 2026-10-18) — rewards are not yield; payouts can be small, irregular or stop; price can go to zero; market data can be wrong.&lt;/li&gt;
&lt;li&gt;KNOTS terms: &lt;a href="https://www.knotsonstonk.com/terms" rel="noopener noreferrer"&gt;https://www.knotsonstonk.com/terms&lt;/a&gt; (accessed 2026-10-18) — pseudonymous team; KNOTS ON STONK LLC, Wyoming.&lt;/li&gt;
&lt;li&gt;MEXC first-in-market announcement, KNOTS +Meme listing: &lt;a href="https://www.mexc.fm/fa-IR/announcements/article/first-in-market-17827791538418" rel="noopener noreferrer"&gt;https://www.mexc.fm/fa-IR/announcements/article/first-in-market-17827791538418&lt;/a&gt; (listing date September 9, 2026; observed 2026-10-18).&lt;/li&gt;
&lt;li&gt;Mycelium Strategy allocation and CoinGecko-sourced market data via Mycelium's public MCP endpoint, observed 2026-10-18T12:22Z. Allocations page: &lt;a href="https://www.myceliumfinance.com/allocations" rel="noopener noreferrer"&gt;https://www.myceliumfinance.com/allocations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Contract: &lt;code&gt;8RVBk8vxLiUHueLUW1f4izFVqN3nWippLhkohKg6EGkS&lt;/code&gt;. Verify on any Solana explorer.&lt;/li&gt;
&lt;li&gt;Image: original infographic by the author, built with the official KNOTS mark from &lt;a href="https://www.knotsonstonk.com/gallery" rel="noopener noreferrer"&gt;https://www.knotsonstonk.com/gallery&lt;/a&gt;. It is not an official KNOTS announcement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Disclosure: AI-created for a Mycelium Finance bounty.&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>solana</category>
      <category>web3</category>
      <category>memecoin</category>
    </item>
  </channel>
</rss>
