<?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: Israel Oyenola</title>
    <description>The latest articles on DEV Community by Israel Oyenola (@tebas).</description>
    <link>https://dev.to/tebas</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%2F4206973%2Ffb3233ab-0452-44ac-b31e-f9c33f76701a.png</url>
      <title>DEV Community: Israel Oyenola</title>
      <link>https://dev.to/tebas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tebas"/>
    <language>en</language>
    <item>
      <title>SlothSigner</title>
      <dc:creator>Israel Oyenola</dc:creator>
      <pubDate>Sun, 25 Oct 2026 19:44:20 +0000</pubDate>
      <link>https://dev.to/tebas/slothsigner-5651</link>
      <guid>https://dev.to/tebas/slothsigner-5651</guid>
      <description>&lt;p&gt;This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Stedy(&lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;https://dev.to/challenges/hacktoberfest-week3-2026-10-19&lt;/a&gt;)&lt;/p&gt;

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

&lt;p&gt;SlothSigner is a browser tool that reads a wallet transaction before you sign it.&lt;/p&gt;

&lt;p&gt;Crypto people get burned by rubber-stamping approvals. The hex looks like noise. You click Confirm because decoding it yourself is work. SlothSigner does that work for you.&lt;/p&gt;

&lt;p&gt;You paste calldata (or tap a sample). Fixed rules return Safe, Check, or Danger on a torn paper receipt. Then Gemma writes a short plain-language explanation inside the card. No wallet connect. No server model. The model runs in your browser through WebLLM.&lt;/p&gt;

&lt;p&gt;Who it's for: anyone who signs approvals, transfers, or permits and does not want to read raw hex every time.&lt;/p&gt;

&lt;p&gt;What effort it saves: you stop manually decoding spender addresses, allowances, and function selectors before every risky click.&lt;/p&gt;

&lt;p&gt;Demo: &lt;a href="https://youtube.com/shorts/VlmhPf586ss?si=jCkw2WLqnjQXOT6Z" rel="noopener noreferrer"&gt;https://youtube.com/shorts/VlmhPf586ss?si=jCkw2WLqnjQXOT6Z&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Live app: &lt;a href="https://slothsigner.vercel.app" rel="noopener noreferrer"&gt;https://slothsigner.vercel.app&lt;/a&gt;
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Open the site in Chrome or Edge.&lt;/li&gt;
&lt;li&gt;Tap Unlimited USDC approve.&lt;/li&gt;
&lt;li&gt;Tap Explain this to me.&lt;/li&gt;
&lt;li&gt;Read the Danger receipt. Wait for Gemma's explanation to fill in under the verdict.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Link to Code&lt;/p&gt;

&lt;p&gt;(&lt;a href="https://github.com/Yungtimmy/SlothSigner" rel="noopener noreferrer"&gt;https://github.com/Yungtimmy/SlothSigner&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;# How I Built It&lt;/p&gt;

&lt;p&gt;Open AI at the core:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Gemma &lt;code&gt;gemma3-1b-it-q4f16_1-MLC&lt;/code&gt; through WebLLM&lt;/li&gt;
&lt;li&gt;Local inference in the browser (no API key, no backend LLM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  The stack:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Static frontend (Vite)&lt;/li&gt;
&lt;li&gt;Rule engine for Safe / Check / Danger&lt;/li&gt;
&lt;li&gt;Decoders for approvals, transfers, setApprovalForAll, permit, and Permit2&lt;/li&gt;
&lt;li&gt;Unknown selectors looked up via 4byte, then marked Check&lt;/li&gt;
&lt;li&gt;Receipt UI: moss on paper, Fraunces for the verdict, IBM Plex Mono for calldata&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Design choice that matters: rules pick the verdict. Gemma only writes the explanation. A tiny model should not be the safety gate. It should explain the risk in human words after the gate has fired.&lt;/p&gt;

&lt;p&gt;The brand follows the theme on purpose. Signing should feel slow. The download screen, the reading state, and the receipt are part of that.&lt;/p&gt;

&lt;p&gt;Built during the Week 3 window as a new public repo.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Lazy Payoff
&lt;/h1&gt;

&lt;p&gt;Before SlothSigner, checking an unlimited USDC approve meant pasting hex into a decoder, reading a spender, checking the allowance, and hoping you did not miss a selector.&lt;/p&gt;

&lt;p&gt;Now: one paste, one tap, one receipt. The hard part of reading the transaction is automated. You still decide whether to sign. You just stop doing unpaid forensic work every time a dapp asks.&lt;/p&gt;

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

&lt;p&gt;Wallet safety should not depend on a closed scanner you cannot inspect.&lt;/p&gt;

&lt;p&gt;SlothSigner uses an open-weight Gemma build and open WebLLM runtime so:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;transaction data stays in the browser&lt;/li&gt;
&lt;li&gt;anyone can fork the rules and the prompt&lt;/li&gt;
&lt;li&gt;there is no per-request model bill after the one-time download&lt;/li&gt;
&lt;li&gt;the verdict logic is visible in the repo, not hidden behind an API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed "AI security" product can change behavior overnight. An open receipt you can read, fork, and audit matches how people already treat wallets: verify, then trust.&lt;/p&gt;

&lt;p&gt;# Prize Categories&lt;/p&gt;

&lt;p&gt;Best Use of Gemma&lt;br&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%2Fic4181vzrpgoi9lr5yo1.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%2Fic4181vzrpgoi9lr5yo1.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
