<?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: Богдан Чернишук</title>
    <description>The latest articles on DEV Community by Богдан Чернишук (@radoautodrops).</description>
    <link>https://dev.to/radoautodrops</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%2F4203636%2F00f5a6d8-db03-4e3f-87ff-2197523aa93a.png</url>
      <title>DEV Community: Богдан Чернишук</title>
      <link>https://dev.to/radoautodrops</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/radoautodrops"/>
    <language>en</language>
    <item>
      <title>StateKeeper: an assistant that remembers what changed, on Walrus Memory</title>
      <dc:creator>Богдан Чернишук</dc:creator>
      <pubDate>Sat, 24 Oct 2026 01:47:45 +0000</pubDate>
      <link>https://dev.to/radoautodrops/statekeeper-an-assistant-that-remembers-what-changed-on-walrus-memory-544a</link>
      <guid>https://dev.to/radoautodrops/statekeeper-an-assistant-that-remembers-what-changed-on-walrus-memory-544a</guid>
      <description>&lt;p&gt;Most assistant memories are a pile of notes. Tell one "I live in Lviv", then "I moved to Kyiv",&lt;br&gt;
and it may answer with either. I built &lt;strong&gt;StateKeeper&lt;/strong&gt; for the Tatum × Walrus &lt;em&gt;Total Recall&lt;/em&gt;&lt;br&gt;
hackathon to handle exactly that: memory of your &lt;em&gt;current&lt;/em&gt; state, with history.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Every fact is a key/value record ("home city: Kyiv").&lt;/li&gt;
&lt;li&gt;A new value &lt;strong&gt;supersedes&lt;/strong&gt; the old one instead of overwriting it, so the answer is current and
the history is visible ("Lviv → Kyiv, turn 2").&lt;/li&gt;
&lt;li&gt;You can &lt;strong&gt;forget&lt;/strong&gt; any fact from the memory view.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it uses Walrus and Tatum
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Walrus blobs:&lt;/strong&gt; each remember / supersede / forget event is stored as a JSON blob through the
Walrus HTTP publisher; the blob id is saved next to the fact in a local SQLite index.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portable snapshot:&lt;/strong&gt; &lt;code&gt;snapshot()&lt;/code&gt; publishes the whole memory with history; &lt;code&gt;restore(blob_id)&lt;/code&gt;
rebuilds it on another machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Walrus Memory (MemWal):&lt;/strong&gt; events can also be mirrored into MemWal as readable memories
("User's current home city: Kyiv (replaces an earlier value)") (&lt;code&gt;STATEKEEPER_MEMWAL=live&lt;/code&gt;, mainnet via the hosted relayer).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tatum Sui RPC:&lt;/strong&gt; &lt;code&gt;/api/onchain/&amp;lt;object_id&amp;gt;&lt;/code&gt; checks that the Walrus Blob object exists onchain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Live demo data
&lt;/h2&gt;

&lt;p&gt;Walrus Memory demo (mainnet, namespace &lt;code&gt;statekeeper-demo&lt;/code&gt;, 10 synthetic facts, written and recalled&lt;br&gt;
on 24 Oct 2026). Blob IDs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;-73blZ2MyeDfFBnpSit9A5njQt1DF9lh2nCSAnp1jdE&lt;/code&gt; (demo city = Lviv)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;q0fu9F2jHEXCGC0yUxchqHAVOcHmZYH7MArIn-9kEkw&lt;/code&gt; (demo city = Kyiv, supersedes 1)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eCgDGeUypMPM1dMyvpZdujr-MjeM9dqWEF-rFL6xwh8&lt;/code&gt; (demo diet)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;WNnCt1FO-1z6UrpGBBFYxacQ_ofnDgxOKekGec31qT0&lt;/code&gt; (demo gym days)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ik59OQUVCD4eluvDXJcbxVD_KLkPKOhcAyNHRuRn3zU&lt;/code&gt; (demo coffee)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HxdGPlXs6-QBtJxIrFkhBR6c1Ye8_Wh2Xxqhbp6e174&lt;/code&gt; (demo pet)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bKyTM88q0t1xUo6yq3iRVQM_yQYw1pPGPd-8BcoBqAM&lt;/code&gt; (demo language)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Vs75ql1YGvhlIv0Jz1DSoTih_c4ySJHEajlNG70H1rk&lt;/code&gt; (demo sport)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;KlTDRoE1AsBLr3YUlFBU6aYZbg9KRXIcJPbhhMX-MFs&lt;/code&gt; (demo budget)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DolPvRZIjrbz3FOV61AcYhOhY62oJPk7Esd98LFveGk&lt;/code&gt; (demo reminder)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Recall check: "Which city does the demo user live in now?" → top hit "User's current demo city:&lt;br&gt;
Kyiv. (replaces an earlier value)". "What pet does the demo user have?" → top hit "a cat named Pixel".&lt;/p&gt;

&lt;h2&gt;
  
  
  How it learns over time
&lt;/h2&gt;

&lt;p&gt;Corrections are first-class. Each supersede is an event on Walrus, so the "learning loop" is&lt;br&gt;
auditable: you can see which fact changed, when, and what replaced it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Walrus Memory runs on Mainnet&lt;/strong&gt; via the free hosted relayer, which sponsors WAL and SUI fees, so
the demo cost me nothing. Memories are SEAL-encrypted; the hosted relayer does see plaintext while
encrypting/embedding (self-hosting or the manual client avoids that).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Walrus blob event log and Tatum Sui GraphQL run on testnet&lt;/strong&gt; (no budget for mainnet tokens).
Testnet blobs expire and testnet can be wiped.&lt;/li&gt;
&lt;li&gt;The live MemWal demo uses 10 synthetic facts, not real user data.&lt;/li&gt;
&lt;li&gt;Fact extraction is simple keyword logic; retrieval is keyword overlap, not embeddings.&lt;/li&gt;
&lt;li&gt;Small personal project, not a benchmark.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;See README and demo instructions.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bogdan Chernishuk — Independent researcher, Ukraine&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/AutoDrops/statekeeper-walrus" rel="noopener noreferrer"&gt;https://github.com/AutoDrops/statekeeper-walrus&lt;/a&gt;&lt;/p&gt;

</description>
      <category>walrussuiaihackathon</category>
    </item>
  </channel>
</rss>
