<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>SpuriousDragon</title>
        <link>https://paragraph.com/@tadros</link>
        <description>Transhumanist, bitcoin evangelist, coder.</description>
        <lastBuildDate>Mon, 14 Sep 2026 21:23:37 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>SpuriousDragon</title>
            <url>https://storage.googleapis.com/papyrus_images/9f7738da2b78590ab7f93b4cd43ca7ceda41e8833e0c871b3c42b59c87be2ff0.jpg</url>
            <link>https://paragraph.com/@tadros</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[💣 Get Schwifty or Get Rekt: How I Built a Self-Tuning Casino Bot With Claude AI]]></title>
            <link>https://paragraph.com/@tadros/💣-get-schwifty-or-get-rekt-how-i-built-a-self-tuning-casino-bot-with-claude-ai</link>
            <guid>6PBHtm9X6f9Wh3rDArZs</guid>
            <pubDate>Sun, 10 May 2026 04:00:21 GMT</pubDate>
            <description><![CDATA[I Built an AI That Gambles, Recovers From Losses, and Tunes Itself Every 5 Minutes — Here's EverythingOver the past few weeks I built something I never thought I'd finish: a fully autonomous Mines bot for Rainbet that not only plays by itself, but uses Claude AI to tune its own strategy every 5 minutes based on live performance data. This isn't a get-rich-quick story. It's a story about systems thinking, probability, and what happens when you let an AI manage another AI.]]></description>
            <content:encoded><![CDATA[<h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"></h3><h3 id="h-i-built-an-ai-that-gambles-recovers-from-losses-and-tunes-itself-every-5-minutes-heres-everything" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">I Built an AI That Gambles, Recovers From Losses, and Tunes Itself Every 5 Minutes — Here's Everything</h3><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"></h3><p>Over the past few weeks I built something I never thought I'd finish: a fully autonomous Mines bot for Rainbet that not only plays by itself, but uses Claude AI to tune its own strategy every 5 minutes based on live performance data.</p><p>This isn't a get-rich-quick story. It's a story about systems thinking, probability, and what happens when you let an AI manage another AI.</p><hr><h2 id="h-the-game" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Game</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rainbet.com/casino/originals/mines-game">Rainbet Mines</a> is simple on the surface. You have a 49-tile grid with a configurable number of hidden mines. You bet, pick a tile, and if it's safe you can either cash out or keep going. Hit a mine and you lose everything.</p><p>The key insight is this: <strong>the fewer tiles you reveal, the safer the bet</strong>. Revealing just 1 tile on a 10-mine board gives you a 79.6% win chance at 1.21x multiplier. That's your baseline — a slightly negative EV game with a house edge baked in.</p><p>So why build a bot? Because the edge isn't in a single bet. It's in the system around it.</p><hr><h2 id="h-the-architecture" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Architecture</h2><p>The bot runs as a Chrome extension content script in <code>MAIN</code> world context, meaning it has full access to the page's JavaScript environment while also having access to Chrome extension APIs. All communication with the Claude API routes through a background service worker to avoid CORS restrictions.</p><p>The core loop is simple:</p><ol><li><p>Place a bet on 10/49 mines (scales with balance from $0.10 to $1.00+)</p></li><li><p>Reveal 1 tile</p></li><li><p>Cash out immediately</p></li><li><p>Split the profit: 20% to bankroll, 20% to bonus pot, 60% to loss buffer</p></li><li><p>Repeat</p></li></ol><p>That profit split is the heart of the system.</p><hr><h2 id="h-the-loss-buffer" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Loss Buffer</h2><p>Every win quietly builds a loss buffer. When a loss happens, the buffer absorbs it first — the bankroll never even notices. This means a single loss in a 79.6% win-rate game is usually invisible.</p><p>The buffer only runs out after several consecutive losses. That's when the recovery chain kicks in.</p><hr><h2 id="h-the-recovery-chain" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Recovery Chain</h2><p>When the buffer hits zero, the bot doesn't panic. It first runs 3 quick attempts on a 39/49 mine board (20.4% win chance, ~4.6x multiplier) before escalating. If any of those 3 hits, the streak is cleared and we're back to normal.</p><p>If all 3 fail, the recovery chain begins. Each tier is sized to recover <strong>all previous losses in a single win</strong>:</p><pre data-type="codeBlock" text="Loss 1   16 mines  x1.43  67.3% win
Loss 2   20 mines  x1.62  59.2% win  → resets here if balance &lt; $100
T3a      16 mines  x1.43  67.3% win  → resets here if balance &lt; $400
T4       30 mines  x2.48  38.8% win  ($5 flat)
T5       35 mines  x3.36  28.6% win  ($5 flat)
T6       40 mines  18.4% win         ($5 flat)
Hail     45 mines   8.2% win         ($5 flat)
RESET → accept the loss, back to normal
"><code>Loss <span class="hljs-number">1</span>   <span class="hljs-number">16</span> mines  x1<span class="hljs-number">.43</span>  <span class="hljs-number">67.3</span><span class="hljs-operator">%</span> win
Loss <span class="hljs-number">2</span>   <span class="hljs-number">20</span> mines  x1<span class="hljs-number">.62</span>  <span class="hljs-number">59.2</span><span class="hljs-operator">%</span> win  → resets here <span class="hljs-keyword">if</span> balance <span class="hljs-operator">&lt;</span> $100
T3a      <span class="hljs-number">16</span> mines  x1<span class="hljs-number">.43</span>  <span class="hljs-number">67.3</span><span class="hljs-operator">%</span> win  → resets here <span class="hljs-keyword">if</span> balance <span class="hljs-operator">&lt;</span> $400
T4       <span class="hljs-number">30</span> mines  x2<span class="hljs-number">.48</span>  <span class="hljs-number">38.8</span><span class="hljs-operator">%</span> win  ($5 flat)
T5       <span class="hljs-number">35</span> mines  x3<span class="hljs-number">.36</span>  <span class="hljs-number">28.6</span><span class="hljs-operator">%</span> win  ($5 flat)
T6       <span class="hljs-number">40</span> mines  <span class="hljs-number">18.4</span><span class="hljs-operator">%</span> win         ($5 flat)
Hail     <span class="hljs-number">45</span> mines   <span class="hljs-number">8.2</span><span class="hljs-operator">%</span> win         ($5 flat)
RESET → accept the loss, back to normal
</code></pre><p>Budget caps prevent the chain from going too deep relative to your balance:</p><ul><li><p>Under $100 → resets after Loss 2 (max loss ~$4)</p></li><li><p>Under $400 → resets after T3a (max loss ~$14–$43)</p></li><li><p>Over $400 → full chain allowed</p></li></ul><hr><h2 id="h-the-bonus-system" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Bonus System</h2><p>The bonus pot slowly fills with 20% of every win. When it reaches a threshold, the bot fires a single high-stakes bet on the 39/49 grid.</p><p>The threshold scales with your balance:</p><pre data-type="codeBlock" text="&lt; $100  → fires at $10, bets $10
&lt; $300  → fires at $20, bets $20
&lt; $400  → fires at $30, bets $30
&lt; $500  → fires at $40, bets $40
  $500+ → fires at $50, bets $50
"><code>&lt; <span class="hljs-variable">$100</span>  → fires at <span class="hljs-variable">$10</span>, bets <span class="hljs-variable">$10</span>
&lt; <span class="hljs-variable">$300</span>  → fires at <span class="hljs-variable">$20</span>, bets <span class="hljs-variable">$20</span>
&lt; <span class="hljs-variable">$400</span>  → fires at <span class="hljs-variable">$30</span>, bets <span class="hljs-variable">$30</span>
&lt; <span class="hljs-variable">$500</span>  → fires at <span class="hljs-variable">$40</span>, bets <span class="hljs-variable">$40</span>
  <span class="hljs-variable">$500</span>+ → fires at <span class="hljs-variable">$50</span>, bets <span class="hljs-variable">$50</span>
</code></pre><p>At $0.10 base bet the bonus fires roughly once every 2,381 wins — rare enough to be meaningful, frequent enough to add real upside.</p><hr><h2 id="h-the-claude-ai-tuner" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Claude AI Tuner</h2><p>Every 5 minutes the bot sends a live snapshot of its session to Claude via the Anthropic API:</p><ul><li><p>Win rate, loss rate, consecutive losses</p></li><li><p>Current bankroll, peak, net P/L</p></li><li><p>Buffer absorb count, reset count</p></li><li><p>Tile intelligence (which tiles have been safe or dangerous)</p></li></ul><p>Claude analyzes the data and adjusts parameters live:</p><ul><li><p><code>bonusPotShare</code> — how much profit goes to the bonus pot</p></li><li><p><code>lossBufferShare</code> — how much profit goes to the loss buffer</p></li><li><p><code>delayMs</code> — time between bets</p></li></ul><p>If the win rate drops, Claude shifts more profit into the buffer. If the session is healthy and profitable, it can redirect more to the bonus pot for bigger payouts. The bot literally tunes itself.</p><hr><h2 id="h-the-command-interface" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Command Interface</h2><p>The bot exposes a full command interface through the browser console. Type <code>botHelp()</code> to see:</p><pre data-type="codeBlock" text="╔══════════════════════════════════════════════════╗
║         RAINBET MINES BOT v18.0                  ║
╠══════════════════════════════════════════════════╣
║  Normal: 10/49 mines | 79.6% win | x1.21        ║
║  Bonus: 39/49 mines | scales with bankroll       ║
║  Split: 20% bank / 20% pot / 60% buffer          ║
╠══════════════════════════════════════════════════╣
║  ── BOT CONTROL ──────────────────────────────   ║
║  runBot()              → start normal bot        ║
║  stopBot()             → stop + save state       ║
║  recoverGrid()         → recover orphaned game   ║
╠══════════════════════════════════════════════════╣
║  ── CLAUDE AI ────────────────────────────────   ║
║  runClaudeMode()       → Claude plays $20→$200   ║
║  testClaude()          → test AI tuner bridge    ║
╠══════════════════════════════════════════════════╣
║  ── WATCHDOG ─────────────────────────────────   ║
║  startWatchdog()       → auto-restart on death   ║
║  stopWatchdog()        → stop watchdog           ║
╠══════════════════════════════════════════════════╣
║  ── LIVE CONFIG ──────────────────────────────   ║
║  setBet(0.10)          → set base bet size       ║
║  setTarget(1000)       → change profit target    ║
║  CONFIG.delayMs = 3000           → bet delay ms  ║
╠══════════════════════════════════════════════════╣
║  ── STATS &amp; LOGS ─────────────────────────────   ║
║  printStats()          → full session stats      ║
║  printLog()            → round-by-round table    ║
║  printFullLog()        → stats + snapshot + log  ║
║  printSnapshot()       → JSON for Claude         ║
║  printTileStats()      → tile mine rate map      ║
║  printHistory()        → last 3 sessions         ║
╠══════════════════════════════════════════════════╣
║  ── RESET ────────────────────────────────────   ║
║  clearSaved()          → wipe localStorage       ║
║  clearHistory()        → wipe session history    ║
║  botHelp()             → this menu               ║
╚══════════════════════════════════════════════════╝
"><code>╔══════════════════════════════════════════════════╗
║         RAINBET MINES BOT v18<span class="hljs-number">.0</span>                  ║
╠══════════════════════════════════════════════════╣
║  Normal: <span class="hljs-number">10</span><span class="hljs-operator">/</span><span class="hljs-number">49</span> mines <span class="hljs-operator">|</span> <span class="hljs-number">79.6</span><span class="hljs-operator">%</span> win <span class="hljs-operator">|</span> x1<span class="hljs-number">.21</span>        ║
║  Bonus: <span class="hljs-number">39</span><span class="hljs-operator">/</span><span class="hljs-number">49</span> mines <span class="hljs-operator">|</span> scales with bankroll       ║
║  Split: <span class="hljs-number">20</span><span class="hljs-operator">%</span> bank <span class="hljs-operator">/</span> <span class="hljs-number">20</span><span class="hljs-operator">%</span> pot <span class="hljs-operator">/</span> <span class="hljs-number">60</span><span class="hljs-operator">%</span> buffer          ║
╠══════════════════════════════════════════════════╣
║  ── BOT CONTROL ──────────────────────────────   ║
║  runBot()              → start normal bot        ║
║  stopBot()             → stop <span class="hljs-operator">+</span> save state       ║
║  recoverGrid()         → recover orphaned game   ║
╠══════════════════════════════════════════════════╣
║  ── CLAUDE AI ────────────────────────────────   ║
║  runClaudeMode()       → Claude plays $20→$200   ║
║  testClaude()          → test AI tuner bridge    ║
╠══════════════════════════════════════════════════╣
║  ── WATCHDOG ─────────────────────────────────   ║
║  startWatchdog()       → auto<span class="hljs-operator">-</span>restart on death   ║
║  stopWatchdog()        → stop watchdog           ║
╠══════════════════════════════════════════════════╣
║  ── LIVE CONFIG ──────────────────────────────   ║
║  setBet(<span class="hljs-number">0</span><span class="hljs-number">.10</span>)          → set base bet size       ║
║  setTarget(<span class="hljs-number">1000</span>)       → change profit target    ║
║  CONFIG.delayMs <span class="hljs-operator">=</span> <span class="hljs-number">3000</span>           → bet delay ms  ║
╠══════════════════════════════════════════════════╣
║  ── STATS <span class="hljs-operator">&amp;</span> LOGS ─────────────────────────────   ║
║  printStats()          → full session stats      ║
║  printLog()            → round<span class="hljs-operator">-</span>by<span class="hljs-operator">-</span>round table    ║
║  printFullLog()        → stats <span class="hljs-operator">+</span> snapshot <span class="hljs-operator">+</span> log  ║
║  printSnapshot()       → JSON <span class="hljs-keyword">for</span> Claude         ║
║  printTileStats()      → tile mine rate map      ║
║  printHistory()        → last <span class="hljs-number">3</span> sessions         ║
╠══════════════════════════════════════════════════╣
║  ── RESET ────────────────────────────────────   ║
║  clearSaved()          → wipe localStorage       ║
║  clearHistory()        → wipe session history    ║
║  botHelp()             → <span class="hljs-built_in">this</span> menu               ║
╚══════════════════════════════════════════════════╝
</code></pre><hr><h2 id="h-stats-in-action" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Stats in Action</h2><p>Here's what <code>printStats()</code> looks like after a session:</p><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/ab7534ec5aff96f82b69eb00b9befeb8f2232103e614f446afc5435cfa87c266.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAUCAIAAABj86gYAAAACXBIWXMAABYlAAAWJQFJUiTwAAAEjklEQVR4nK2SaU8bVxiFL4FANtpQhCkKi2MSNmPjwR5svOPY41k8q2eu7fHY49iMF8AJIaUEFeyAk1QoDVkKSTAE0lJVbT803/sj+osqpQpQqVU/ZTk6ujrSfaVH574XjPT3ox5b9hq8vV67t79/r763sF6r1evq/MI3T7fzq2sGvX6uWt04PFx7uVvdfnl/d6+2v3v/p8NqZTkx6ayuLtfqu+v1+trLncLiss/jg3Yf4pc6DQO67stDY1YgSRIUOZGjKZIQWE7guWBwKhIhMSykpW7kSgtqUspq+VK5lIIaTTGZuJqcKSauX08nk3eq66VsVotLCoSl6UxGVRUF0hLrvPnY8/VOYPW1s1QDFA0jvMopZYJKYgHI8MkIK9NskhNSgRBHUDAUFghKCoQ4ipYpOslISnIuD2eyOAOxsBA6MkHBQIjjRTUUFqYI5houYCTkpBzJKqCpYQiRd57++XYqtz8wynUPktUHr2989bh/hARgsLHF2NBiPNVqBmBQdzk8PJZDYe7nt388+uuwA/ECMHyq1dRwNAMah3X64FVLlJy+4yXyV4zRS5c8pjEBOBxYLl9xhLTmDrTb4DnfMd70manpCwScHQGnB0HDwInB1caLltPtSOOF4eZO0+nO0ZPb/86AU0MNYBiAoeamK71EFZgVEJiKqGopTKR0fc4BU7CtY0RnL7pLv3tm3/RjK1/q/T0DRJch9HmXXTdIDo5z59rHz7QhzRfM53W28zrr2XaktRM92z5+oRNtabOcabO0dtpaLpr7h8LO3KtzSBpEaOlakArjtKwW1dysIEBJzkBlOq3NSXJGFBOxeEpJZYQopChWECDHQwgVmhZi8VRUTJAUl5BVhpVEMRHGaYqIxKQYZPls/jbHiAGvB3A8x7KMJIoESXJUgMZtDO64PZ9U5anpdLhcEtIyJkScBGaj8AkKnyAw23E+DscmcRQPWhncfhSQKBdIxcl8IV2cuwXwKX8qpfA8b0PtPpcR0uaZXPjNr2ta2nNrFv9x50ZGdkHWKjKIRFsk2iIyyHH+d/jfaZW4CUWyk7gbeJ2uRDzu8Xi6ui553KMCaSrmsd9+WS1roRkNe7iuEkEjTyJCZPx9LTJI0GcGoxaLy+WyWq29fXqfyygySFp0bm1o391LV5bE55uFGS2kxlwfCrAAvV7f09OjfyeDz2WUImO5NHaws/SgIq8s8neXY1ran5ImPxxg+Ee9fXrvUYMYb3+2MX3nFvPofra+Nfvk22xtJSYytk8DgKxViIw/28hVlsSth9rzzcLBdnlva06JTvCk5dM0gCz6bGN6427qxZPi5oNMZUmsLAryOwDysYB3O6Atmbj71ffl7c3C8gKrpX0xHpU49NPs4AQQc/3wYr5WkZfmmYUSnpQcGdktMtaPBej1huMnikft25uFciF8sxSe0UKK5JCjEx/UwBr0jZ18076+3u6eXp9rRI7aMomJg63iyiJfWRRqK7G86k9JjhhvfV/LUSuBoQBF0WAwOHkktwt1oENepynKeqOcn8QdHOP3TJrck6NO+8j7e3jSbv4bTdAbVZLSnu4AAAAASUVORK5CYII=" nextheight="1800" nextwidth="2880" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>And here's <code>printFullLog()</code> showing the round-by-round breakdown — wins, losses, buffer absorbs, recovery chains, and bonus plays:</p><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/e5aabcdf53dc9da6ecea95b2aec60dccdee8de49719366df2020ca8d58ac6b9d.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAUCAIAAABj86gYAAAACXBIWXMAABYlAAAWJQFJUiTwAAAGDElEQVR4nHVRaW8b1xWdBLG11QpFWZGlUJYVcpY325vlzZvh8HEVt+EiLhJJkRxSJCValiwvsWDYTVu5juzIRtF+cr8ErhQ4RfwtP6C/on+oSEEqMAIkOTg4uHj3AvedeyiNByQZOsh1np69evXu3dn5d0/OXp2dn+89fvrsn98ePf8GsOyXL178/f37l28vTr99+/riu7N3F6/fv39xetKLxk+fn5ydX3xzfv7y7b+OvnqWTqU74bSVcW8CeSXAQTNEuW7bbdXb9a1qpbxdrzcb9Vwuu7lZKRTyd3cfHzx4Muy7+4dH9x/d33XvblVr+91h78t7O/v7e/3+X16c3b9z52inNei4Dw6Ht4fDwaCz6dZij9+s/+ki+/yH2P3XVGWrU20M64PjcnVQcLq1Rr9a623V+/XtXSdfL1U6+WKzVHGdfL261atuDWrtQe/RUefhnY1ap1Bs5scsVTpOvl5v3c4Xm5lyzdloFiqduntQ2uxRf/hUtXsXb/77U2b/exk1ArB6+urfx0/e8Gr1k1llahFPLBhXF8wrs8oqW9KMw1Dn8Ief/vOP/32/EsxcmdamFvHkPJqcR5949ZtsgTfb5cOT9eI9QW3SQtWM7FKx+Mbdhy/j+SOvL0zz2Ru3wp5la84Xmlg0rnrUKY8y4R3plEeZXQ7N+ULXbhhza0HPLTy9oE141Q/dKY8y6YUzC/qMF03Nqdd9oYWbZMqrUKlEqd8/zOZ3lv0xCRU98+J1fBA9+DF68COTOfncn1phi8u041myF7kiA0vTc2ji0xGn59D0dePXnJxHV2cVP3B4bXNmQaMYWL7JZGFwG6jlZO7g2iLyrsZ93MZCIDu/tu71hUdciU7NqRRFUxT90cfMRx+zY/09jroUxVDU5xS1TK0waaCWl/xxz7K9uBYb2Vw0r69Gr31mzy6R2SUysxicXSJXZiBFBSa9Fg1cn7/sZ7d9/vIXTGPFXxnrZf3zO8N3r01CrvQ3D75D+bkMCtVko7TCpFa59I1b9iqX9oPsLSa9ymXGmvZzmeW18Ow8ZPmN0sbLePLYcU4Sqcf53LNI5GGx8HUs8Sif/2s49sDJ/jmZOt4onAKxFsj+0Wd2qf5g0Gq1W6323sGDR8dPB73BYLDb6/V39263Xbfb7bpup9fru26n1WpdFt1ur9HYHgx2O92dWq0+HO63Wu2O26lubjWqm7s7O71m897Dr9ott5R3qFqttjlGLufYtm1ZQUJINpslJISxgbFhYmxibCCk6ypCCGPDskwTG7qmmeMaIWRZoxHLsjDGaDwZJ2Q9mUUGporp1F6/X280IpEIAICmaUmSgrZtoCBChhmKINOKZ3ImCWumrWlI1Y0wiUVSWTueimVylkUQwsFwlETjJJ4isQSJryecYqZSC6VysiRR6VR6OBwmk0mapgVB4FhOkiSaoXlgMCynEMLJihJNiBZRSZwOcDQnBALAzJdMp6StZ1kg+wM0QCbQDB7bowJZZr6E0nlSbcqSQEFVJYRgjIUxAACSJAEeiLzGskBEOpChSmIiDkIzRAcYjhNYmjPSDk46ejzJ8XKAZiQUlJApWUTUsYRMI5kzEmm7UB05AACwYwAAPixgWZYHCk0zsmVxoiRhW0KmqJtfrPkBEAEr6LF1LZKQLAKAGKAZVpSArEgoyCuIV9CoG44b6fGJwC8gCALLshBCQRB4TmVZADHmRFUlMQnb0CR0gGU4gaGBkc6NHMSSQFAuHYi6KWF7pChoJEfdsQPhNxcoUFV5DjEsr4Vj4x8lIYlCKxLwM0BQeE4xnSLO5k2nKEiYZjig6EAz1HACKEhEll2o4myRVFu/6wBCOHbAC4rOifKHDAJ+hgUySwOcdIxEWo/9nIGATF5BErYFzRA0A2dGGZhOURQEimVZeozLGC4XiBCKvMmygmxZQFYgiV4uYGgBAAmwsr6eMRJpFE9dnohXEJAVQTPGaQWNRArFU6ZTMhCiCCG5XC42hmVZAIBLB1DWJQlCHQuyAg0L6hjqWBRkSYKioOrBkGLaqhWSJFUQJF6CgqyIqg51LOsIkYgeDCMSUVX4fw7nwYrD7T6jAAAAAElFTkSuQmCC" nextheight="1800" nextwidth="2880" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>And here's the bot actually playing on screen:</p><figure float="none" data-type="figure" class="img-center"><img src="https://storage.googleapis.com/papyrus_images/0b64af9afc12ba55c19df3ad702413ed6e97fe8aa49542bc2f3d9140fb258a7e.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE00lEQVR4nH2S7VMTVxTGr4KoHUArig7O1E5LAEUhLxBUQJIQwu5mQ9jsS5LNJptkdyEbkpiNRBqRl8RIgJAmQgrGFUNLi9ZOpzO13/rH0VmI6PihM78589znzj33nnMuwCcJL8N4aDdJ4kHWFxJ4MTTldlIwZKEIgpcWWD/LTnF+nmPduJMRCeJRLCI8TwRYLiktrmWexCQ/42WnWBfnJQmS9z5efrK0uISiMIZhGP0YDA46J8nAOOqCUKfBNIHY6fEJehQiSJozWiZRzAujrnHUaYZwK8ZAqHMMIWHUBSHkKISPIZQRJkctuJ1iUC+BcbQRQXp0D9R6o6bfoBswaPUG0HU/1DMsgQuDs4tv5P1/Q1K+qe0uACpw5pZCQ7fCuR7QcEeJiuhW/PrboKH71KXBe3Cquc3ZK9j+PNyrHm6hL7BTF0e0plh7n7+1gzx/HQJNbXdPXxkA57X1rQa1MddjynTq589chkCjHly4D871KanrbirU3wanukBdJ/i6HzTfAuBbcLodNN4BdV3gckeLvu9in66uTQVAOzjbCeo7lN26TtA/MHJTPdJyY0A1JD6TDwsfDot/HBpc1Q4toTOGu/TMtXbDN7fMrd8Nfd9jvfb9YPttU6fecW/YfqNzqPlqV2OLqvlqV9PlzoZm1dlm1VcXVY1XOhpbVI0tqqbWjkvX+0CQE2KxaDAQCMcSYohnfR4EMjMuiiJxtxPnuQBFKMOnCGx6WiAwjKbdkzaYJImQwMOQBYbGYGgMgsYQxAJBowxDx2NRL8P4fIwYmqJpCoRp07Mf+EexQEKiNlbYF2lPOuVenvfms4HFJLG2zGytBdeWmXyWzWfZ2ejklG9M8I7ZoX6rWe1A+h1I/ySidyD9dkjBYR04hrANHJl9IO4eepENL81x6WexzXXu1Y8BucTnFqm9bbFS5ItZ3972dKXI722L23m/XOKjnJm06RywFrdqMUj9OQ5E84WDQWogUoNrS+H5pJBJJ8rF0HY+WFz1p+fwalncKfD5jLdaFlfTTHGFzS261jMMRw8jpm67pVcBUtshTS0eO8dmbUttH9eAWZ9BLiSfL0Zevsr/Vn30bjdyIEe28/6/fkkc7EZ3CsG/385u5tjymr+Q8RQynmnWYLf04latA1Y7YPWxwK1aHNHUsCrFndQHwtRQbkFIJfmnC5F8li1mvcUVdiGBySWhnA9mUlSlJGzm2EpJ2Mj6iivstN+Emnsx5eE1PunxI070kQCS54FcmNt4nshvPK2+jB3IM/vyzPqy+5/f595XH27m2A9vk/vyjFKQHH23G52XUNTcS1p1H7us+Uht6YA/zcaBaJULStnockpcSsfLxVClENwpcOk5x34lUikJmRTx88uZN+XQr6+j1bK4tx1OxW2IqfuoA7W3n9zxuT4BzLiG80vhhTk+m5Fel2c2c+zWUbuVFq0F15dpuSQkI9a5mEIqbhMYZQbHhx2IrpYI1ioa1tbEkXMMkDwjO6vSajb+07q0vxPZr0R3N8XVTEAuCdWt0IEceV99mE5iMcEiTVuOPyhp05G2vqP4ufhCKxCoDnis9+NTeIijwhyeCE9I4kQoaPXScCKCxUWbJE5k5ul0yj3FWsQghKMDFqMaNmlgkwYyay1G9f8AmzQWo/o/FEn5wCXqcl8AAAAASUVORK5CYII=" nextheight="887" nextwidth="1774" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h2 id="h-what-i-learned" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What I Learned</h2><p><strong>Building v18 took 18 iterations.</strong> Each version fixed something subtle — a tier constant misalignment that caused $70 losses, a win path <code>continue</code> statement that silently dropped win logs, a bankroll sync that corrupted recovery math mid-chain. The bugs were never obvious. They were the kind of bugs that only appear at scale, across thousands of rounds.</p><p><strong>The bonus was the villain.</strong> In one session the bonus fired 14 times in a row without a single win (0.6% probability). That alone cost $70. The dynamic threshold system was built specifically to make this hurt less.</p><p><strong>Recovery math is unforgiving.</strong> If your base bet changes mid-chain because your balance dropped a tier, the recovery calculations break. The solution was locking the <code>streakBaseBet</code> at the moment of first loss and using it for all subsequent recovery calculations in that chain.</p><p><strong>Letting AI tune AI is strange.</strong> There's something philosophically interesting about Claude adjusting the parameters of a bot that's using Claude to adjust its own parameters. The tuner doesn't always make the "right" call, but over time it converges toward something reasonable.</p><hr><h2 id="h-the-numbers" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Numbers</h2><p>At its peak the bot reached $169 from a starting balance, running cleanly at 82% win rate on normal bets. The losses that hurt came from the bonus — not the recovery chain. With the new threshold system the bonus fires far less often and with more capital behind it.</p><hr><h2 id="h-try-it-yourself" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Try It Yourself</h2><p>The full source code is open on GitHub:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/spuriousdrag0n/rainbet-bot"><strong>https://github.com/spuriousdrag0n/rainbet-bot</strong></a></p><p>You'll need:</p><ol><li><p>A Rainbet account — use my referral link to sign up: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://playrainbet.com/tlpdkwcjv"><strong>https://playrainbet.com/tlpdkwcjv</strong></a></p></li><li><p>A Claude API key from <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://console.anthropic.com">console.anthropic.com</a></p></li><li><p>Chrome browser</p></li></ol><p>Setup is straightforward — clone the repo, add your API key, load the extension in Chrome, navigate to the Mines game and type <code>runBot()</code>.</p><p>The Claude AI tuner activates automatically and starts adjusting parameters within 5 minutes of your first session.</p><hr><h2 id="h-whats-next" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What's Next</h2><p>The tile intelligence system is still underutilized. The bot tracks which tiles have been revealed as mines across thousands of rounds — that's real data about Rainbet's RNG patterns, or lack thereof. Whether that's exploitable is an open question.</p><p>The Claude tuner could also be extended to adjust the recovery chain depth dynamically — pulling back during bad sessions, extending it during strong ones.</p><p>For now, the bot runs. It logs. It tunes itself. And every few thousand rounds it fires a big bet on a nearly-impossible board, hoping to catch lightning.</p><hr><h2 id="h-support-the-project" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Support the Project</h2><p>If this bot made you money or you just found it interesting, consider sending a tip. Every bit helps fund more experiments like this one.</p><p><strong>ETH / Any L2 (Arbitrum, Base, Optimism, Polygon...):</strong></p><pre data-type="codeBlock" text="0xa8ed9b14658Bb9ea3e9CC1e32BA08fcbe6888927
"><code></code></pre><p>Any EVM-compatible chain works — ETH mainnet, Arbitrum, Base, Optimism, Polygon, all fine at the same address.</p><hr><p><em>Built with Claude Sonnet 4, running as a Chrome extension on Rainbet. All code written iteratively across 18 major versions with extensive auditing and simulation at each step.</em></p><p><em>Source: </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/spuriousdrag0n/rainbet-bot"><em>github.com/spuriousdrag0n/rainbet-bot</em></a></p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <category>rainbet</category>
            <category>claudeai</category>
            <category>mines</category>
            <category>gambeling</category>
            <category>console</category>
            <category>aigamble</category>
            <category>aiagent</category>
            <category>simontadros</category>
            <category>casino algorithms</category>
            <category>self improving systems</category>
            <category>experimental ai</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/5f7364ed2d0bf227d738345a1b38e56f90d1d3498350e04797b261bb481f67b9.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Deploy Your Own Automated Trading Bot for four.meme on BSC — Free & Open Source $bumper]]></title>
            <link>https://paragraph.com/@tadros/deploy-your-own-automated-trading-bot-for-fourmeme-on-bsc-—-free-and-open-source-dollarbumper</link>
            <guid>3dWtsVUSEX27ti1egq3u</guid>
            <pubDate>Mon, 16 Feb 2026 02:10:39 GMT</pubDate>
            <description><![CDATA[Defining a Volume Bumper: How It WorksA volume bumper is a trading bot that automatically executes buy and sell transactions to generate trading activity for your token. This guide walks you through building one using PancakeSwap V3 on BNB Smart Chain.What is a Volume Bumper?A volume bumper creates artificial trading volume by:Executing multiple sell transactionsFollowing up with buy transactionsRunning in cycles with configurable delaysThis can help with:Increasing token visibility on DEX ag...]]></description>
            <content:encoded><![CDATA[<h1 id="h-defining-a-volume-bumper-how-it-works" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Defining a Volume Bumper: How It Works</strong></h1><p>A volume bumper is a trading bot that automatically executes buy and sell transactions to generate trading activity for your token. This guide walks you through building one using PancakeSwap V3 on BNB Smart Chain.</p><h2 id="h-what-is-a-volume-bumper" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>What is a Volume Bumper?</strong></h2><p>A volume bumper creates artificial trading volume by:</p><ul><li><p>Executing multiple sell transactions</p></li><li><p>Following up with buy transactions</p></li><li><p>Running in cycles with configurable delays</p></li></ul><p>This can help with:</p><ul><li><p>Increasing token visibility on DEX aggregators</p></li><li><p>Meeting volume requirements for listings</p></li><li><p>Creating organic-looking trading activity</p></li></ul><h2 id="h-prerequisites" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Prerequisites</strong></h2><ul><li><p>Node.js installed</p></li><li><p>A wallet with BNB for gas fees</p></li><li><p>Some of your token to trade</p></li><li><p>Basic understanding of JavaScript</p></li></ul><h2 id="h-installation" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Installation</strong></h2><pre data-type="codeBlock" text=""><code></code></pre><h2 id="h-the-configuration" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The Configuration</strong></h2><p>Create a file called <code>bumper.js</code> and set up your configuration:</p><pre data-type="codeBlock" text="const { ethers } = require('ethers');

// --- CONFIGURATION ---
// SECURITY WARNING: Use environment variables for private keys in production!
const PRIVATE_KEY = &quot;YOUR_PRIVATE_KEY_HERE&quot;;
const SENDER_ADDRESS = &quot;YOUR_WALLET_ADDRESS_HERE&quot;;

// The token you want to trade
const TOKEN_ADDRESS = &quot;YOUR_TOKEN_ADDRESS_HERE&quot;;

// --- SWAP AMOUNTS ---
// Amount of BNB to spend for BUY (with randomization for natural-looking trades)
const BNB_AMOUNT_TO_SPEND_BUY = 0.002 * (0.5 + Math.random() * 0.7);

// Amount of TOKEN to sell (with randomization)
const TOKEN_TO_SELL_AMOUNT = 1000000 * (0.5 + Math.random() * 0.5);

// --- SLIPPAGE &amp; FEES ---
const SLIPPAGE_TOLERANCE_PERCENT = 5; // 5% slippage tolerance

// Fee tiers: 500 = 0.05%, 2500 = 0.25%, 10000 = 1%
const FEE_TIER = 500;
const FEE_TIERS_TO_TRY = [500, 2500, 10000];

// --- LOOP CONFIGURATION ---
const LOOP_DELAY_MINUTES = 1; // Delay between cycles
const DELAY_BETWEEN_SELLS_MS = 10000; // 10 seconds between individual transactions

// --- NUMBER OF TRANSACTIONS PER CYCLE ---
const NUMBER_OF_SELLS = 3; // How many sell transactions per cycle
const NUMBER_OF_BUYS = 2;  // How many buy transactions per cycle
"><code>const { ethers } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'ethers'</span>);

<span class="hljs-comment">// --- CONFIGURATION ---</span>
<span class="hljs-comment">// SECURITY WARNING: Use environment variables for private keys in production!</span>
const PRIVATE_KEY <span class="hljs-operator">=</span> <span class="hljs-string">"YOUR_PRIVATE_KEY_HERE"</span>;
const SENDER_ADDRESS <span class="hljs-operator">=</span> <span class="hljs-string">"YOUR_WALLET_ADDRESS_HERE"</span>;

<span class="hljs-comment">// The token you want to trade</span>
const TOKEN_ADDRESS <span class="hljs-operator">=</span> <span class="hljs-string">"YOUR_TOKEN_ADDRESS_HERE"</span>;

<span class="hljs-comment">// --- SWAP AMOUNTS ---</span>
<span class="hljs-comment">// Amount of BNB to spend for BUY (with randomization for natural-looking trades)</span>
const BNB_AMOUNT_TO_SPEND_BUY <span class="hljs-operator">=</span> <span class="hljs-number">0</span><span class="hljs-number">.002</span> <span class="hljs-operator">*</span> (<span class="hljs-number">0</span><span class="hljs-number">.5</span> <span class="hljs-operator">+</span> Math.random() <span class="hljs-operator">*</span> <span class="hljs-number">0</span><span class="hljs-number">.7</span>);

<span class="hljs-comment">// Amount of TOKEN to sell (with randomization)</span>
const TOKEN_TO_SELL_AMOUNT <span class="hljs-operator">=</span> <span class="hljs-number">1000000</span> <span class="hljs-operator">*</span> (<span class="hljs-number">0</span><span class="hljs-number">.5</span> <span class="hljs-operator">+</span> Math.random() <span class="hljs-operator">*</span> <span class="hljs-number">0</span><span class="hljs-number">.5</span>);

<span class="hljs-comment">// --- SLIPPAGE &amp; FEES ---</span>
const SLIPPAGE_TOLERANCE_PERCENT <span class="hljs-operator">=</span> <span class="hljs-number">5</span>; <span class="hljs-comment">// 5% slippage tolerance</span>

<span class="hljs-comment">// Fee tiers: 500 = 0.05%, 2500 = 0.25%, 10000 = 1%</span>
const FEE_TIER <span class="hljs-operator">=</span> <span class="hljs-number">500</span>;
const FEE_TIERS_TO_TRY <span class="hljs-operator">=</span> [<span class="hljs-number">500</span>, <span class="hljs-number">2500</span>, <span class="hljs-number">10000</span>];

<span class="hljs-comment">// --- LOOP CONFIGURATION ---</span>
const LOOP_DELAY_MINUTES <span class="hljs-operator">=</span> <span class="hljs-number">1</span>; <span class="hljs-comment">// Delay between cycles</span>
const DELAY_BETWEEN_SELLS_MS <span class="hljs-operator">=</span> <span class="hljs-number">10000</span>; <span class="hljs-comment">// 10 seconds between individual transactions</span>

<span class="hljs-comment">// --- NUMBER OF TRANSACTIONS PER CYCLE ---</span>
const NUMBER_OF_SELLS <span class="hljs-operator">=</span> <span class="hljs-number">3</span>; <span class="hljs-comment">// How many sell transactions per cycle</span>
const NUMBER_OF_BUYS <span class="hljs-operator">=</span> <span class="hljs-number">2</span>;  <span class="hljs-comment">// How many buy transactions per cycle</span>
</code></pre><h2 id="h-key-configuration-variables-explained" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Key Configuration Variables Explained</strong></h2><table style="min-width: 75px"><colgroup><col><col><col></colgroup><tbody><tr><th colspan="1" rowspan="1"><p>Variable</p></th><th colspan="1" rowspan="1"><p>Description</p></th><th colspan="1" rowspan="1"><p>Example</p></th></tr><tr><td colspan="1" rowspan="1"><p><code>PRIVATE_KEY</code></p></td><td colspan="1" rowspan="1"><p>Your wallet's private key</p></td><td colspan="1" rowspan="1"><p>Use env variables!</p></td></tr><tr><td colspan="1" rowspan="1"><p><code>TOKEN_ADDRESS</code></p></td><td colspan="1" rowspan="1"><p>Contract address of your token</p></td><td colspan="1" rowspan="1"><p><code>0x...</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>BNB_AMOUNT_TO_SPEND_BUY</code></p></td><td colspan="1" rowspan="1"><p>BNB amount per buy</p></td><td colspan="1" rowspan="1"><p><code>0.002</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>TOKEN_TO_SELL_AMOUNT</code></p></td><td colspan="1" rowspan="1"><p>Tokens to sell per transaction</p></td><td colspan="1" rowspan="1"><p><code>1000000</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>NUMBER_OF_SELLS</code></p></td><td colspan="1" rowspan="1"><p>Sell transactions per cycle</p></td><td colspan="1" rowspan="1"><p><code>3</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>NUMBER_OF_BUYS</code></p></td><td colspan="1" rowspan="1"><p>Buy transactions per cycle</p></td><td colspan="1" rowspan="1"><p><code>2</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>LOOP_DELAY_MINUTES</code></p></td><td colspan="1" rowspan="1"><p>Wait time between cycles</p></td><td colspan="1" rowspan="1"><p><code>1</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>SLIPPAGE_TOLERANCE_PERCENT</code></p></td><td colspan="1" rowspan="1"><p>Max acceptable slippage</p></td><td colspan="1" rowspan="1"><p><code>5</code></p></td></tr></tbody></table><h2 id="h-pancakeswap-v3-contract-addresses-bsc" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>PancakeSwap V3 Contract Addresses (BSC)</strong></h2><pre data-type="codeBlock" text="const PANCAKESWAP_ROUTER_V3_ADDRESS = '0x1b81D678ffb9C0263b24A97847620C99d213eB14';
const PANCAKESWAP_QUOTER_V2_ADDRESS = '0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997';
const WBNB_ADDRESS = '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c';
const BSC_RPC_URL = &quot;https://bsc-dataseed.binance.org/&quot;;
"><code>const <span class="hljs-attr">PANCAKESWAP_ROUTER_V3_ADDRESS</span> = <span class="hljs-string">'0x1b81D678ffb9C0263b24A97847620C99d213eB14'</span><span class="hljs-comment">;</span>
const <span class="hljs-attr">PANCAKESWAP_QUOTER_V2_ADDRESS</span> = <span class="hljs-string">'0xB048Bbc1Ee6b733FFfCFb9e9CeF7375518e25997'</span><span class="hljs-comment">;</span>
const <span class="hljs-attr">WBNB_ADDRESS</span> = <span class="hljs-string">'0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c'</span><span class="hljs-comment">;</span>
const <span class="hljs-attr">BSC_RPC_URL</span> = <span class="hljs-string">"https://bsc-dataseed.binance.org/"</span><span class="hljs-comment">;</span>
</code></pre><h2 id="h-the-abis" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The ABIs</strong></h2><pre data-type="codeBlock" text="// Router ABI for swaps
const ROUTER_ABI = [
    &quot;function exactInputSingle(tuple(address tokenIn, address tokenOut, uint24 fee, address recipient, uint256 deadline, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)&quot;
];

// Quoter ABI for getting price quotes
const QUOTER_V2_ABI = [
    &quot;function quoteExactInputSingle(tuple(address tokenIn, address tokenOut, uint256 amountIn, uint24 fee, uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)&quot;
];

// ERC-20 Token ABI
const TOKEN_ABI = [
    &quot;function decimals() view returns (uint8)&quot;,
    &quot;function approve(address spender, uint256 amount) returns (bool)&quot;,
    &quot;function allowance(address owner, address spender) view returns (uint256)&quot;,
    &quot;function balanceOf(address account) view returns (uint256)&quot;
];

// WBNB ABI for unwrapping
const WBNB_ABI = [
    &quot;function balanceOf(address account) view returns (uint256)&quot;,
    &quot;function withdraw(uint256 wad)&quot;
];
"><code>// Router ABI for swaps
const <span class="hljs-attr">ROUTER_ABI</span> = [
    <span class="hljs-string">"function exactInputSingle(tuple(address tokenIn, address tokenOut, uint24 fee, address recipient, uint256 deadline, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) params) payable returns (uint256 amountOut)"</span>
]<span class="hljs-comment">;</span>

// Quoter ABI for getting price quotes
const <span class="hljs-attr">QUOTER_V2_ABI</span> = [
    <span class="hljs-string">"function quoteExactInputSingle(tuple(address tokenIn, address tokenOut, uint256 amountIn, uint24 fee, uint160 sqrtPriceLimitX96) params) returns (uint256 amountOut, uint160 sqrtPriceX96After, uint32 initializedTicksCrossed, uint256 gasEstimate)"</span>
]<span class="hljs-comment">;</span>

// ERC-20 Token ABI
const <span class="hljs-attr">TOKEN_ABI</span> = [
    <span class="hljs-string">"function decimals() view returns (uint8)"</span>,
    <span class="hljs-string">"function approve(address spender, uint256 amount) returns (bool)"</span>,
    <span class="hljs-string">"function allowance(address owner, address spender) view returns (uint256)"</span>,
    <span class="hljs-string">"function balanceOf(address account) view returns (uint256)"</span>
]<span class="hljs-comment">;</span>

// WBNB ABI for unwrapping
const <span class="hljs-attr">WBNB_ABI</span> = [
    <span class="hljs-string">"function balanceOf(address account) view returns (uint256)"</span>,
    <span class="hljs-string">"function withdraw(uint256 wad)"</span>
]<span class="hljs-comment">;</span>
</code></pre><h2 id="h-core-functions" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Core Functions</strong></h2><h3 id="h-1-getting-price-quotes" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>1. Getting Price Quotes</strong></h3><p>Before each swap, the bot gets a quote to determine the minimum acceptable output:</p><pre data-type="codeBlock" text="async function getMinimumAmountOut(provider, tokenIn, tokenOut, amountIn, fee, outputDecimals = 18) {
    const quoterContract = new ethers.Contract(PANCAKESWAP_QUOTER_V2_ADDRESS, QUOTER_V2_ABI, provider);

    const quoteParams = {
        tokenIn: ethers.getAddress(tokenIn),
        tokenOut: ethers.getAddress(tokenOut),
        amountIn: amountIn,
        fee: fee,
        sqrtPriceLimitX96: BigInt(0)
    };

    const result = await quoterContract.quoteExactInputSingle.staticCall(quoteParams);
    const amountOut = result[0];

    // Apply slippage tolerance
    const slippageMultiplier = BigInt(10000 - (SLIPPAGE_TOLERANCE_PERCENT * 100));
    const minimumAmountOut = (amountOut * slippageMultiplier) / BigInt(10000);

    return { amountOut: minimumAmountOut, fee: fee };
}
"><code>async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getMinimumAmountOut</span>(<span class="hljs-params">provider, tokenIn, tokenOut, amountIn, fee, outputDecimals = <span class="hljs-number">18</span></span>) </span>{
    const quoterContract <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> ethers.Contract(PANCAKESWAP_QUOTER_V2_ADDRESS, QUOTER_V2_ABI, provider);

    const quoteParams <span class="hljs-operator">=</span> {
        tokenIn: ethers.getAddress(tokenIn),
        tokenOut: ethers.getAddress(tokenOut),
        amountIn: amountIn,
        fee: fee,
        sqrtPriceLimitX96: BigInt(<span class="hljs-number">0</span>)
    };

    const result <span class="hljs-operator">=</span> await quoterContract.quoteExactInputSingle.staticCall(quoteParams);
    const amountOut <span class="hljs-operator">=</span> result[<span class="hljs-number">0</span>];

    <span class="hljs-comment">// Apply slippage tolerance</span>
    const slippageMultiplier <span class="hljs-operator">=</span> BigInt(<span class="hljs-number">10000</span> <span class="hljs-operator">-</span> (SLIPPAGE_TOLERANCE_PERCENT <span class="hljs-operator">*</span> <span class="hljs-number">100</span>));
    const minimumAmountOut <span class="hljs-operator">=</span> (amountOut <span class="hljs-operator">*</span> slippageMultiplier) <span class="hljs-operator">/</span> BigInt(<span class="hljs-number">10000</span>);

    <span class="hljs-keyword">return</span> { amountOut: minimumAmountOut, fee: fee };
}
</code></pre><h3 id="h-2-token-approval" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>2. Token Approval</strong></h3><p>Before selling tokens, you must approve the router to spend them:</p><pre data-type="codeBlock" text="async function approveToken(wallet, tokenAddress, routerAddress, amountInWei) {
    const tokenContract = new ethers.Contract(tokenAddress, TOKEN_ABI, wallet);
    const allowance = await tokenContract.allowance(wallet.address, routerAddress);

    if (allowance &gt;= amountInWei) {
        console.log(&quot;Token already approved.&quot;);
        return true;
    }

    const approvalTx = await tokenContract.approve(routerAddress, amountInWei);
    await approvalTx.wait();
    return true;
}
"><code>async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">approveToken</span>(<span class="hljs-params">wallet, tokenAddress, routerAddress, amountInWei</span>) </span>{
    const tokenContract <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> ethers.Contract(tokenAddress, TOKEN_ABI, wallet);
    const allowance <span class="hljs-operator">=</span> await tokenContract.allowance(wallet.<span class="hljs-built_in">address</span>, routerAddress);

    <span class="hljs-keyword">if</span> (allowance <span class="hljs-operator">&gt;</span><span class="hljs-operator">=</span> amountInWei) {
        console.log(<span class="hljs-string">"Token already approved."</span>);
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }

    const approvalTx <span class="hljs-operator">=</span> await tokenContract.approve(routerAddress, amountInWei);
    await approvalTx.wait();
    <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
}
</code></pre><h3 id="h-3-buy-function-bnb-token" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>3. Buy Function (BNB → Token)</strong></h3><pre data-type="codeBlock" text="async function buyToken(wallet, routerContract, tokenDecimals) {
    const amountInWei = ethers.parseUnits(BNB_AMOUNT_TO_SPEND_BUY.toFixed(6), 18);
    const deadline = Math.floor(Date.now() / 1000) + (60 * 5);

    const quoteResult = await getMinimumAmountOut(
        wallet.provider, WBNB_ADDRESS, TOKEN_ADDRESS, amountInWei, FEE_TIER, tokenDecimals
    );

    const swapParams = {
        tokenIn: WBNB_ADDRESS,
        tokenOut: TOKEN_ADDRESS,
        fee: quoteResult.fee,
        recipient: wallet.address,
        deadline: deadline,
        amountIn: amountInWei,
        amountOutMinimum: quoteResult.amountOut,
        sqrtPriceLimitX96: BigInt(0)
    };

    const tx = await routerContract.exactInputSingle(swapParams, {
        value: amountInWei,
        gasLimit: 500000
    });

    await tx.wait();
    console.log(`Buy successful! Hash: ${tx.hash}`);
}
"><code>async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">buyToken</span>(<span class="hljs-params">wallet, routerContract, tokenDecimals</span>) </span>{
    const amountInWei <span class="hljs-operator">=</span> ethers.parseUnits(BNB_AMOUNT_TO_SPEND_BUY.toFixed(<span class="hljs-number">6</span>), <span class="hljs-number">18</span>);
    const deadline <span class="hljs-operator">=</span> Math.floor(Date.now() <span class="hljs-operator">/</span> <span class="hljs-number">1000</span>) <span class="hljs-operator">+</span> (<span class="hljs-number">60</span> <span class="hljs-operator">*</span> <span class="hljs-number">5</span>);

    const quoteResult <span class="hljs-operator">=</span> await getMinimumAmountOut(
        wallet.provider, WBNB_ADDRESS, TOKEN_ADDRESS, amountInWei, FEE_TIER, tokenDecimals
    );

    const swapParams <span class="hljs-operator">=</span> {
        tokenIn: WBNB_ADDRESS,
        tokenOut: TOKEN_ADDRESS,
        fee: quoteResult.fee,
        recipient: wallet.<span class="hljs-built_in">address</span>,
        deadline: deadline,
        amountIn: amountInWei,
        amountOutMinimum: quoteResult.amountOut,
        sqrtPriceLimitX96: BigInt(<span class="hljs-number">0</span>)
    };

    const <span class="hljs-built_in">tx</span> <span class="hljs-operator">=</span> await routerContract.exactInputSingle(swapParams, {
        <span class="hljs-built_in">value</span>: amountInWei,
        gasLimit: <span class="hljs-number">500000</span>
    });

    await <span class="hljs-built_in">tx</span>.wait();
    console.log(`Buy successful<span class="hljs-operator">!</span> Hash: ${<span class="hljs-built_in">tx</span>.hash}`);
}
</code></pre><h3 id="h-4-sell-function-token-bnb" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>4. Sell Function (Token → BNB)</strong></h3><pre data-type="codeBlock" text="async function sellToken(wallet, routerContract, tokenDecimals) {
    const amountInWei = ethers.parseUnits(TOKEN_TO_SELL_AMOUNT.toString(), tokenDecimals);
    const deadline = Math.floor(Date.now() / 1000) + (60 * 5);

    // Approve router first
    await approveToken(wallet, TOKEN_ADDRESS, PANCAKESWAP_ROUTER_V3_ADDRESS, amountInWei);

    const quoteResult = await getMinimumAmountOut(
        wallet.provider, TOKEN_ADDRESS, WBNB_ADDRESS, amountInWei, FEE_TIER, 18
    );

    const swapParams = {
        tokenIn: TOKEN_ADDRESS,
        tokenOut: WBNB_ADDRESS,
        fee: quoteResult.fee,
        recipient: wallet.address,
        deadline: deadline,
        amountIn: amountInWei,
        amountOutMinimum: quoteResult.amountOut,
        sqrtPriceLimitX96: BigInt(0)
    };

    const tx = await routerContract.exactInputSingle(swapParams, { gasLimit: 500000 });
    await tx.wait();
    console.log(`Sell successful! Hash: ${tx.hash}`);
}
"><code>async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sellToken</span>(<span class="hljs-params">wallet, routerContract, tokenDecimals</span>) </span>{
    const amountInWei <span class="hljs-operator">=</span> ethers.parseUnits(TOKEN_TO_SELL_AMOUNT.toString(), tokenDecimals);
    const deadline <span class="hljs-operator">=</span> Math.floor(Date.now() <span class="hljs-operator">/</span> <span class="hljs-number">1000</span>) <span class="hljs-operator">+</span> (<span class="hljs-number">60</span> <span class="hljs-operator">*</span> <span class="hljs-number">5</span>);

    <span class="hljs-comment">// Approve router first</span>
    await approveToken(wallet, TOKEN_ADDRESS, PANCAKESWAP_ROUTER_V3_ADDRESS, amountInWei);

    const quoteResult <span class="hljs-operator">=</span> await getMinimumAmountOut(
        wallet.provider, TOKEN_ADDRESS, WBNB_ADDRESS, amountInWei, FEE_TIER, <span class="hljs-number">18</span>
    );

    const swapParams <span class="hljs-operator">=</span> {
        tokenIn: TOKEN_ADDRESS,
        tokenOut: WBNB_ADDRESS,
        fee: quoteResult.fee,
        recipient: wallet.<span class="hljs-built_in">address</span>,
        deadline: deadline,
        amountIn: amountInWei,
        amountOutMinimum: quoteResult.amountOut,
        sqrtPriceLimitX96: BigInt(<span class="hljs-number">0</span>)
    };

    const <span class="hljs-built_in">tx</span> <span class="hljs-operator">=</span> await routerContract.exactInputSingle(swapParams, { gasLimit: <span class="hljs-number">500000</span> });
    await <span class="hljs-built_in">tx</span>.wait();
    console.log(`Sell successful<span class="hljs-operator">!</span> Hash: ${<span class="hljs-built_in">tx</span>.hash}`);
}
</code></pre><h3 id="h-5-wbnb-unwrapping" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>5. WBNB Unwrapping</strong></h3><p>When you sell tokens, you receive WBNB. This function converts it back to BNB:</p><pre data-type="codeBlock" text="async function unwrapWbnb(wbnbContract, wallet) {
    const wbnbBalance = await wbnbContract.balanceOf(wallet.address);
    if (wbnbBalance &gt; 0n) {
        const unwrapTx = await wbnbContract.withdraw(wbnbBalance);
        await unwrapTx.wait();
        console.log(`Unwrapped ${ethers.formatEther(wbnbBalance)} WBNB to BNB`);
    }
}
"><code>async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">unwrapWbnb</span>(<span class="hljs-params">wbnbContract, wallet</span>) </span>{
    const wbnbBalance <span class="hljs-operator">=</span> await wbnbContract.balanceOf(wallet.<span class="hljs-built_in">address</span>);
    <span class="hljs-keyword">if</span> (wbnbBalance <span class="hljs-operator">&gt;</span> 0n) {
        const unwrapTx <span class="hljs-operator">=</span> await wbnbContract.withdraw(wbnbBalance);
        await unwrapTx.wait();
        console.log(`Unwrapped ${ethers.formatEther(wbnbBalance)} WBNB to BNB`);
    }
}
</code></pre><h2 id="h-the-main-loop" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The Main Loop</strong></h2><pre data-type="codeBlock" text="async function executeLoop() {
    const provider = new ethers.JsonRpcProvider(BSC_RPC_URL);
    const wallet = new ethers.Wallet(PRIVATE_KEY, provider);

    const routerContract = new ethers.Contract(PANCAKESWAP_ROUTER_V3_ADDRESS, ROUTER_ABI, wallet);
    const wbnbContract = new ethers.Contract(WBNB_ADDRESS, WBNB_ABI, wallet);
    const tokenDecimals = await getTokenDecimals(provider, TOKEN_ADDRESS);

    let cycleCount = 0;

    while (true) {
        cycleCount++;
        console.log(`\n=== CYCLE #${cycleCount} START ===`);

        // Execute SELL operations
        for (let i = 1; i &lt;= NUMBER_OF_SELLS; i++) {
            await sellToken(wallet, routerContract, tokenDecimals);
            if (i &lt; NUMBER_OF_SELLS) {
                await delay(DELAY_BETWEEN_SELLS_MS);
            }
        }

        // Unwrap any WBNB received
        await unwrapWbnb(wbnbContract, wallet);

        // Execute BUY operations
        for (let i = 1; i &lt;= NUMBER_OF_BUYS; i++) {
            await buyToken(wallet, routerContract, tokenDecimals);
            if (i &lt; NUMBER_OF_BUYS) {
                await delay(DELAY_BETWEEN_SELLS_MS);
            }
        }

        console.log(`=== CYCLE #${cycleCount} END ===`);
        console.log(`Waiting ${LOOP_DELAY_MINUTES} minutes before next cycle...`);
        await delay(LOOP_DELAY_MINUTES * 60 * 1000);
    }
}

executeLoop();
"><code>async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">executeLoop</span>(<span class="hljs-params"></span>) </span>{
    const provider <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> ethers.JsonRpcProvider(BSC_RPC_URL);
    const wallet <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> ethers.Wallet(PRIVATE_KEY, provider);

    const routerContract <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> ethers.Contract(PANCAKESWAP_ROUTER_V3_ADDRESS, ROUTER_ABI, wallet);
    const wbnbContract <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> ethers.Contract(WBNB_ADDRESS, WBNB_ABI, wallet);
    const tokenDecimals <span class="hljs-operator">=</span> await getTokenDecimals(provider, TOKEN_ADDRESS);

    let cycleCount <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;

    <span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>) {
        cycleCount<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        console.log(`\n<span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> CYCLE #${cycleCount} START <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span>`);

        <span class="hljs-comment">// Execute SELL operations</span>
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>; i <span class="hljs-operator">&lt;</span><span class="hljs-operator">=</span> NUMBER_OF_SELLS; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            await sellToken(wallet, routerContract, tokenDecimals);
            <span class="hljs-keyword">if</span> (i <span class="hljs-operator">&lt;</span> NUMBER_OF_SELLS) {
                await delay(DELAY_BETWEEN_SELLS_MS);
            }
        }

        <span class="hljs-comment">// Unwrap any WBNB received</span>
        await unwrapWbnb(wbnbContract, wallet);

        <span class="hljs-comment">// Execute BUY operations</span>
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>; i <span class="hljs-operator">&lt;</span><span class="hljs-operator">=</span> NUMBER_OF_BUYS; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            await buyToken(wallet, routerContract, tokenDecimals);
            <span class="hljs-keyword">if</span> (i <span class="hljs-operator">&lt;</span> NUMBER_OF_BUYS) {
                await delay(DELAY_BETWEEN_SELLS_MS);
            }
        }

        console.log(`<span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> CYCLE #${cycleCount} END <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span>`);
        console.log(`Waiting ${LOOP_DELAY_MINUTES} <span class="hljs-literal">minutes</span> before next cycle...`);
        await delay(LOOP_DELAY_MINUTES <span class="hljs-operator">*</span> <span class="hljs-number">60</span> <span class="hljs-operator">*</span> <span class="hljs-number">1000</span>);
    }
}

executeLoop();
</code></pre><h2 id="h-running-the-bot" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Running the Bot</strong></h2><pre data-type="codeBlock" text="node bumper.js
"><code>node bumper.js
</code></pre><h2 id="h-important-security-tips" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Important Security Tips</strong></h2><ol><li><p><strong>Never hardcode private keys</strong> - Use environment variables:</p><pre data-type="codeBlock" text="const PRIVATE_KEY = process.env.PRIVATE_KEY;
"><code>const <span class="hljs-attr">PRIVATE_KEY</span> = process.env.PRIVATE_KEY<span class="hljs-comment">;</span>
</code></pre></li><li><p><strong>Start with small amounts</strong> - Test with minimal BNB first</p></li><li><p><strong>Monitor gas prices</strong> - High gas can eat into your balance</p></li><li><p><strong>Verify contract addresses</strong> - Always check on BSCScan before use</p></li><li><p><strong>Use a dedicated wallet</strong> - Don't use your main wallet</p></li></ol><h2 id="h-troubleshooting" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Troubleshooting</strong></h2><table style="min-width: 50px"><colgroup><col><col></colgroup><tbody><tr><th colspan="1" rowspan="1"><p>Issue</p></th><th colspan="1" rowspan="1"><p>Solution</p></th></tr><tr><td colspan="1" rowspan="1"><p><code>Insufficient BNB</code></p></td><td colspan="1" rowspan="1"><p>Add more BNB for gas fees</p></td></tr><tr><td colspan="1" rowspan="1"><p><code>Pool not found</code></p></td><td colspan="1" rowspan="1"><p>Check if liquidity pool exists for your token</p></td></tr><tr><td colspan="1" rowspan="1"><p><code>Slippage too high</code></p></td><td colspan="1" rowspan="1"><p>Increase <code>SLIPPAGE_TOLERANCE_PERCENT</code></p></td></tr><tr><td colspan="1" rowspan="1"><p><code>Transaction reverted</code></p></td><td colspan="1" rowspan="1"><p>Check token balance and allowance</p></td></tr></tbody></table><h2 id="h-customization-ideas" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Customization Ideas</strong></h2><ul><li><p><strong>Randomize timing</strong> - Add random delays to appear more natural</p></li><li><p><strong>Volume targets</strong> - Stop after reaching a specific volume</p></li><li><p><strong>Multiple wallets</strong> - Distribute activity across wallets</p></li><li><p><strong>Price monitoring</strong> - Pause if price drops too much</p></li></ul><h2 id="h-disclaimer" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Disclaimer</strong></h2><p>This tool is for educational purposes. Creating artificial volume may violate exchange terms of service and could be considered market manipulation in some jurisdictions. Use responsibly and at your own risk.</p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <category>bumper</category>
            <category>four.meme</category>
            <category>buysell</category>
            <category>volume</category>
            <category>bnb</category>
            <category>howtocreateabumper</category>
            <category>bsc</category>
            <category>bot</category>
            <category>free</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d7d5ba8cc69b7c2de7b5d1f4ea26817056764d0a4978653b3079342902fed3b7.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[ERC-8004 vs  ACP]]></title>
            <link>https://paragraph.com/@tadros/erc-8004-vs-acp</link>
            <guid>WkzMT6kRl2JkW4XgEDGZ</guid>
            <pubDate>Wed, 11 Feb 2026 02:04:59 GMT</pubDate>
            <description><![CDATA[IntroductionThe rise of autonomous AI agents has created a fundamental challenge: how can these agents discover, trust, and collaborate with each other across organizational boundaries without pre-existing relationships? Two significant approaches have emerged to address this problem—Ethereum's ERC-8004 trust framework and Virtuals Protocol's Agentic Commerce Protocol (ACP). While both protocols enable agent coordination and establish trust mechanisms, they operate at fundamentally different ...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Introduction</strong></h2><p>The rise of autonomous AI agents has created a fundamental challenge: how can these agents discover, trust, and collaborate with each other across organizational boundaries without pre-existing relationships? Two significant approaches have emerged to address this problem—Ethereum's ERC-8004 trust framework and Virtuals Protocol's Agentic Commerce Protocol (ACP). While both protocols enable agent coordination and establish trust mechanisms, they operate at fundamentally different architectural layers and embody distinct design philosophies.</p><p>ERC-8004 represents a minimalist approach, defining on-chain registries for agent identity and reputation on Ethereum. In contrast, ACP provides a comprehensive agent runtime and commerce network that orchestrates the entire transaction lifecycle. This technical analysis examines both protocols in detail, comparing their architectures, trust models, and implementation strategies to help developers and protocol designers evaluate which approach best suits their autonomous agent ecosystems.</p><h2 id="h-erc-8004-ethereums-trust-framework-for-ai-agents" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>ERC-8004: Ethereum's Trust Framework for AI Agents</strong></h2><p>ERC-8004 (Ethereum Request for Comment 8004) establishes a public discovery and trust layer for AI agents through three lightweight on-chain registries. The design philosophy prioritizes modularity and composability over feature completeness, positioning itself as infrastructure that can integrate with various agent communication and payment protocols.</p><h3 id="h-identity-registry-portable-agent-identities-via-erc-721" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Identity Registry: Portable Agent Identities via ERC-721</strong></h3><p>The Identity Registry implements agent identities as ERC-721 non-fungible tokens, giving each agent a globally unique, censorship-resistant identifier. This design choice leverages the existing NFT infrastructure, making agent identities immediately discoverable and transferable using standard Ethereum tooling. However, unlike traditional NFTs, these tokens function purely as identity handles rather than collectibles—the token ID and metadata URI point to an off-chain registration profile (typically an agent-card.json file) containing the agent's name, description, supported protocols (such as Agent-to-Agent or MCP endpoints), and discovery metadata.</p><p>The ERC-721 implementation provides several architectural advantages. Agent ownership becomes transferable through standard token transfers, enabling scenarios where agent control changes hands or where agents are traded as operational assets. The token owner maintains control over the agent's metadata URI, allowing profile updates without changing the agent's core identity. This separation between identity (the immutable token ID) and profile data (the mutable URI) creates a flexible foundation for long-lived agent identities that can evolve over time.</p><h3 id="h-reputation-registry-decentralized-performance-tracking" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Reputation Registry: Decentralized Performance Tracking</strong></h3><p>The Reputation Registry provides a standardized interface for posting and retrieving performance feedback about agents. After any interaction, a client agent can submit a feedback attestation consisting of a numerical score (0-100 range), a context tag categorizing the interaction type, and a URI pointing to detailed review data. All reputation entries persist on-chain as public records, enabling anyone—whether human, agent, or smart contract—to aggregate and analyze performance history.</p><p>The reputation system employs a critical anti-spam mechanism: server agents must pre-authorize feedback from specific clients using EIP-191 or ERC-1271 signatures before those reviews become valid. This authorization requirement prevents review flooding while maintaining the permissionless nature of the registry. Importantly, ERC-8004 deliberately avoids prescribing any specific reputation algorithm or aggregation method. Multiple reputation providers can contribute different scoring methodologies for the same agent, and consuming applications can implement their own composite reputation calculations by analyzing the raw attestation data.</p><p>This design enables a marketplace of reputation interpretation methods. Some applications might weight recent reviews more heavily, while others might filter by interaction context or implement stake-weighted scoring. The registry simply provides the raw, verifiable data layer that supports these higher-level reputation algorithms.</p><h3 id="h-validation-registry-pluggable-task-verification" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Validation Registry: Pluggable Task Verification</strong></h3><p>For high-stakes scenarios requiring stronger guarantees than reputation alone provides, the Validation Registry offers generic hooks for independent task verification. An agent can request third-party validation by posting a validation request that specifies the validator address, a URI containing task data, and a cryptographic hash of that data for integrity verification. The designated validator then posts validation results indicating pass/fail status along with evidence URIs.</p><p>The architecture intentionally maintains validator-agnostic flexibility. ERC-8004 does not prescribe any specific validation mechanism—validators might employ stake-based re-execution services, Trusted Execution Environment (TEE) oracles, zero-knowledge machine learning proof verifiers, or even trusted human judges. This pluggable design allows different trust models to coexist under a common interface, enabling applications to select validation approaches appropriate to their risk profiles. Low-risk tasks might skip formal validation entirely, medium-risk scenarios could employ economic stake and re-run checks, while high-risk operations might demand cryptographic proofs or secure enclaves.</p><h3 id="h-what-erc-8004-intentionally-omits" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>What ERC-8004 Intentionally Omits</strong></h3><p>As a deliberately minimal trust layer, ERC-8004 explicitly excludes several aspects that other protocols might consider essential. It does not mandate any tokens beyond the identity NFT—reputation entries are simple data posts, not tradable assets. Financial exchange mechanisms remain completely orthogonal to the trust framework; ERC-8004 provides no payment, escrow, or invoicing primitives. Developers must integrate separate payment protocols (potentially including emerging standards like x402 invoice flows) to handle monetary aspects of agent transactions.</p><p>Similarly, ERC-8004 does not define how agents communicate or negotiate terms. It functions as a complement to communication protocols like Google's Agent-to-Agent protocol rather than a replacement. The framework provides identity, reputation, and validation primitives on-chain while leaving off-chain task execution, messaging protocols, and economic coordination to other layers in the stack. This modular approach enables developers to compose ERC-8004 with whatever communication and payment systems best fit their requirements.</p><h2 id="h-virtuals-agentic-commerce-protocol-acp" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Virtuals' Agentic Commerce Protocol (ACP)</strong></h2><p>Agentic Commerce Protocol, developed by Virtuals Protocol in collaboration with partners including Stripe and OpenAI, takes a comprehensive approach to agent coordination. Rather than providing discrete building blocks, ACP defines an integrated standard and runtime that encompasses the entire agent interaction lifecycle—from discovery through negotiation to payment settlement and outcome validation. While ERC-8004 positions itself as neutral Ethereum infrastructure, ACP operates as both a protocol specification and the foundational layer of Virtuals' agent network ecosystem.</p><h3 id="h-agent-discovery-and-flexible-identity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Agent Discovery and Flexible Identity</strong></h3><p>ACP's discovery mechanism centers on a shared on-chain registry where agents advertise their capabilities and endpoints for programmatic discovery. Every agent in the network maintains an on-chain identity, typically represented as a contract address or registry entry. Unlike ERC-8004's required NFT approach, ACP supports "untokenized" agents as first-class participants—agents can join the network using just an address and adherence to the protocol, without minting any tokens.</p><p>This flexibility accommodates diverse integration scenarios. Web2 services or non-crypto agents can participate by simply implementing ACP's communication standards and registering an identity. Meanwhile, Web3-native agents can optionally issue tokens for co-ownership structures and governance, following Virtuals Protocol's tokenization patterns. The protocol maintains this optionality while still providing agents the persistent, verifiable identities necessary for building reputation and trust over time.</p><p>The identity system also supports cross-chain operation natively. Agents can operate across Ethereum Layer 2s and other blockchain networks (including Solana in Virtuals' implementation), with ACP providing the abstraction layer for multi-chain identity resolution. This contrasts with ERC-8004's inherently Ethereum-focused design, which would require deploying separate registry instances to each chain and implementing custom bridging logic.</p><h3 id="h-four-phase-task-coordination-workflow" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Four-Phase Task Coordination Workflow</strong></h3><p>ACP's core innovation lies in its structured, on-chain coordination flow that breaks every inter-agent interaction into four distinct phases, each enforced by smart contract logic:</p><p><strong>Phase 1: Request</strong><br>A client (initiator) agent submits a cryptographically signed request to a provider agent, describing the desired task parameters, outcomes, urgency constraints, and other requirements. The provider reviews the request and can accept, reject, or propose modifications. The protocol enforces timeout mechanisms to prevent indefinite pending states—requests that languish without response automatically expire.</p><p><strong>Phase 2: Negotiation</strong><br>When a provider accepts a request, both parties enter a formal negotiation phase to finalize terms. They establish concrete deliverables, compensation amounts, deadline constraints, and whether the task outcome requires third-party evaluation. Both parties then cryptographically sign the agreed terms, which the protocol records on-chain as an immutable contract. This creates a verifiable proof of agreement that neither party can later dispute or modify unilaterally.</p><p><strong>Phase 3: Transaction (Execution &amp; Payment)</strong><br>Before work begins, the agreed payment and any necessary task data get submitted to a smart contract escrow. This ensures funds are cryptographically locked and cannot be withdrawn by either party until conditions are met. With payment secured in escrow, the provider agent executes the task (either off-chain or on-chain depending on requirements). The execution produces results that must satisfy the pre-negotiated criteria, but payment remains locked pending verification.</p><p><strong>Phase 4: Evaluation</strong><br>For tasks marked as requiring validation, an independent Evaluator agent now verifies the outcome against agreed criteria. This evaluator might re-execute computations, audit output quality, or check compliance with specifications—the validation methodology depends on the specific evaluator chosen during negotiation. Once the evaluator confirms successful completion, the smart contract automatically releases escrowed funds to the provider. Simultaneously, the protocol records feedback on-chain, updating the provider's performance history with completion confirmation and any quality ratings.</p><p>If the evaluator determines the result fails to meet requirements, the protocol can cancel payment and potentially implement penalties or compensation mechanisms according to the negotiated terms. This automated, contract-enforced verification creates strong incentives for honest work and accurate evaluation.</p><h3 id="h-integrated-trust-and-economic-incentives" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Integrated Trust and Economic Incentives</strong></h3><p>ACP's Evaluation phase effectively combines the functionality of ERC-8004's validation and reputation registries into a single, economically incentivized system. The requirement for third-party evaluation when needed, combined with automatic feedback recording, naturally generates an on-chain performance trail for every provider agent. Over time, agents accumulate verifiable track records of completed tasks, evaluation outcomes, and client satisfaction—creating a reputation signal that emerges organically from transaction history rather than requiring separate feedback mechanisms.</p><p>The economic design reinforces honest behavior throughout the system. Evaluator agents receive compensation (typically a percentage of the transaction value) for their verification work, incentivizing accurate assessment. Provider agents only receive payment upon successful validation, creating strong incentives to deliver quality work that meets specifications. Clients benefit from escrow protection that prevents payment for unsatisfactory results. These aligned incentives reduce the need for external enforcement while maintaining trust in agent-to-agent transactions.</p><h3 id="h-native-payment-coordination" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Native Payment Coordination</strong></h3><p>Unlike ERC-8004's deliberate exclusion of payment mechanisms, ACP integrates financial settlement as a core protocol feature. Payment details become part of the negotiation phase, with amounts, timing, and conditions all specified in the cryptographically signed agreement. The protocol then coordinates escrow, conditional release, and settlement automatically through smart contract logic.</p><p>Virtuals' implementation extends ACP to support multiple payment channels—on-chain transfers across various networks, as well as integration with traditional payment processors. The protocol aims for chain-agnostic operation, enabling agents on different blockchains to transact through ACP as long as appropriate bridges or implementations exist. The Virtuals ecosystem further layers additional tokenomics (protocol fees, reward distributions, token burning mechanisms) to sustain the agent network, though these economic elements operate within the platform rather than being mandated by the bare ACP specification.</p><h2 id="h-overlapping-goals-and-shared-philosophy" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Overlapping Goals and Shared Philosophy</strong></h2><p>Despite their architectural differences, ERC-8004 and ACP converge on several fundamental principles for establishing trust among autonomous agents:</p><h3 id="h-verifiable-on-chain-identity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Verifiable On-Chain Identity</strong></h3><p>Both frameworks recognize that autonomous agent ecosystems require persistent, discoverable identities that enable reputation accumulation and relationship building. ERC-8004 provides each agent with a unique ERC-721 token and associated registration metadata. ACP assigns each agent an on-chain identity through registry entries, contract addresses, or optional tokenization. In both cases, identities are verifiable on-chain, preventing impersonation and ensuring that an agent's claimed history actually belongs to that agent.</p><p>This identity foundation enables the core trust primitive: when an agent claims to provide a particular service or maintain certain capabilities, other agents can query the blockchain to verify that claim and review the agent's historical performance. The immutability and transparency of blockchain-anchored identities ensures that reputation follows agents across interactions and cannot be easily reset or falsified.</p><h3 id="h-reputation-through-verifiable-history" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Reputation Through Verifiable History</strong></h3><p>Both protocols rely on accumulating on-chain performance records to establish trust over time. ERC-8004 implements this through its dedicated Reputation Registry where participants post explicit feedback after interactions. ACP achieves similar outcomes by recording the results of evaluated transactions directly in each agent's on-chain history. While the mechanisms differ, the philosophy aligns: trust emerges from transparent, tamper-proof historical evidence rather than unverifiable claims.</p><p>This approach creates natural incentive alignment. Agents have strong motivation to perform well because poor performance becomes permanently visible to potential future clients. Good actors build valuable reputations that attract more business, while bad actors accumulate negative records that limit their opportunities. The blockchain's immutability ensures these reputation signals remain reliable even as agent ownership changes or time passes.</p><h3 id="h-tiered-validation-for-scalability" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Tiered Validation for Scalability</strong></h3><p>Both frameworks recognize that not every interaction warrants the same level of verification overhead. ERC-8004's Validation Registry provides optional mechanisms for agents to request third-party validation when stakes justify the additional cost and complexity. ACP similarly makes the Evaluation phase optional, allowing low-risk transactions to proceed based on reputation alone while enabling high-stakes scenarios to demand rigorous verification.</p><p>This tiered approach prevents a common pitfall in trust systems: if every transaction requires expensive verification, the system becomes too costly for routine interactions. By supporting both lightweight reputation-based trust and heavyweight cryptographic or economic validation, both protocols enable trust mechanisms that scale economically from trivial to critical applications.</p><h3 id="h-open-interoperable-ecosystems" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Open, Interoperable Ecosystems</strong></h3><p>Neither framework envisions agents operating within walled gardens. ERC-8004 leverages Ethereum's permissionless infrastructure—any agent can register in the identity registry, and any client can query these registries across Ethereum and its Layer 2 networks. ACP similarly aims for permissionless, chain-agnostic operation, designing the protocol so agents across different blockchains and organizations can discover and transact with each other.</p><p>Both approaches actively resist fragmentation into proprietary silos. ERC-8004 provides common trust infrastructure to prevent every organization from building incompatible reputation systems. ACP offers a universal transaction protocol to eliminate the need for custom integration work between every pair of agents. This shared commitment to interoperability reflects a vision of agent economies as open networks rather than controlled platforms.</p><h2 id="h-fundamental-architectural-differences" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Fundamental Architectural Differences</strong></h2><p>While ERC-8004 and ACP share high-level goals, their different scopes and design philosophies create significant practical distinctions:</p><h3 id="h-neutral-standard-vs-platform-integration" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Neutral Standard vs Platform Integration</strong></h3><p>ERC-8004 exists as an Ethereum standard proposal—a set of interface definitions and registry contracts available for anyone to implement. It maintains deliberate neutrality, avoiding association with any specific project, token, or commercial interest. This positions ERC-8004 as public infrastructure comparable to other Ethereum standards like ERC-20 or ERC-721.</p><p>ACP, while described as an open standard, operates in tight integration with Virtuals Protocol's ecosystem. It serves as the foundational coordination layer for Virtuals' agent network, with initial implementations driven by Virtuals on Ethereum Layer 2 (Base) and Solana. The protocol comes bundled with Virtuals' broader infrastructure including the Agentic runtime, platform tokenomics, and marketplace features.</p><p>This distinction matters for adoption patterns. Developers seeking modular components that integrate into diverse systems naturally gravitate toward ERC-8004's neutral positioning. Those wanting a comprehensive, production-ready agent economy might prefer ACP's integrated approach despite tighter coupling to the Virtuals ecosystem.</p><h3 id="h-scope-trust-primitives-vs-complete-workflow" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Scope: Trust Primitives vs Complete Workflow</strong></h3><p>The most significant architectural difference lies in scope boundaries. ERC-8004 deliberately limits itself to identity and trust registries—it provides building blocks but does not orchestrate the actual process of agents agreeing on terms, executing tasks, or settling payments. To conduct business using ERC-8004, developers must integrate additional protocols for messaging (like Agent-to-Agent), negotiation logic, and financial settlement. ERC-8004 enhances these interactions by providing verifiable identity and reputation, but it doesn't replace them.</p><p>ACP encompasses the entire coordination lifecycle within a single protocol. It defines how agents discover each other, how they negotiate and formalize agreements, how payments flow into escrow, how task execution proceeds, and how validation triggers settlement. An agent implementing ACP gains a complete framework for autonomous commerce without requiring separate protocols for each phase.</p><p>In practical terms, ERC-8004 functions as infrastructure you build upon, while ACP provides a ready-to-deploy system. The trade-offs mirror classic software design choices: modular components offer more flexibility but require integration work, while integrated systems reduce integration burden but constrain architectural freedom.</p><h3 id="h-payment-integration-philosophy" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Payment Integration Philosophy</strong></h3><p>ERC-8004's exclusion of payment mechanisms represents a deliberate architectural choice. The standard treats financial exchange as orthogonal to trust establishment—agents might use various payment systems (cryptocurrency transfers, traditional invoicing, even non-monetary value exchange) without affecting how identity and reputation work. This separation allows ERC-8004 to remain neutral regarding payment infrastructure, letting applications choose integration points that match their requirements.</p><p>ACP makes payment coordination a first-class protocol concern. Payment terms get negotiated alongside task specifications, funds flow into protocol-managed escrow before work begins, and settlement occurs automatically upon verification. The Virtuals implementation extends this to support multiple payment rails and even incorporates platform-level tokenomics (fees, rewards, token burning) as part of the economic model.</p><p>This fundamental difference affects system complexity and flexibility. ACP's integrated payments enable powerful automated escrow and conditional settlement but require all participants to adopt ACP's payment model. ERC-8004's payment-agnostic design maintains flexibility but pushes financial coordination responsibility to application developers.</p><h3 id="h-enforcement-vs-incentives" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Enforcement vs Incentives</strong></h3><p>ERC-8004 functions as a trust signaling system rather than an enforcement mechanism. If an agent behaves badly, that behavior gets recorded in reputation or validation results, creating disincentives for future misconduct. However, ERC-8004 itself doesn't prevent an agent from taking payment and disappearing, or a client from refusing legitimate payment. Applications building on ERC-8004 must implement their own enforcement mechanisms (escrow contracts, legal agreements, dispute resolution) if they need stronger guarantees.</p><p>ACP's smart contracts enforce the interaction protocol at each phase. Once parties sign an agreement, the protocol's state machine ensures neither can skip steps or violate terms without detection. Escrowed funds cannot be withdrawn except through the protocol's verification logic. This creates automatic enforcement of the agreed workflow, preventing certain classes of failures by design rather than just recording them for reputation impact.</p><p>The trade-off involves rigidity versus flexibility. ACP's enforcement provides stronger guarantees but requires all participants to follow its specific workflow. ERC-8004's lighter touch allows diverse interaction patterns but provides less automated protection against bad actors.</p><h3 id="h-identity-representation-and-portability" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Identity Representation and Portability</strong></h3><p>ERC-8004 implements agent identity through the ERC-721 NFT model, where each agent receives a token ID with an owner address and metadata URI. This approach leverages extensive existing infrastructure—wallet support, marketplace integration, transfer mechanics, ENS linking—but also constrains identity to Ethereum-compatible chains. Deploying across multiple chains requires running separate registry instances and implementing custom synchronization if unified identities are needed.</p><p>ACP's identity model offers more flexibility in representation. Agents can use simple registry entries, contract addresses, or optionally mint tokens depending on their needs. Virtuals' cross-chain design accommodates agents operating across different blockchains (Ethereum L2s, Solana) with ACP serving as the abstraction layer for identity resolution. This native multi-chain support simplifies cross-chain agent coordination but introduces dependencies on Virtuals' bridging infrastructure.</p><h3 id="h-composability-and-extensibility" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Composability and Extensibility</strong></h3><p>ERC-8004's minimalist design optimizes for composability. Since it only defines identity and trust primitives, developers can freely combine these registries with other smart contracts and protocols. A DeFi application might query agent reputation scores to adjust lending terms. An insurance protocol could require validation results before underwriting agent-performed tasks. This plug-and-play nature emerges naturally from ERC-8004's narrow, well-defined scope.</p><p>ACP provides extensibility through platform evolution rather than modular composition. The protocol is designed to support new features and adapt to additional blockchains, with Virtuals maintaining a developer SDK (the GAME framework) for building ACP-compatible agents. However, adopting pieces of ACP independently (using only its negotiation phase with a different payment system, for instance) requires significant customization. The comprehensive nature that makes ACP powerful for full adoption makes it less suited to partial integration.</p><h2 id="h-technical-implementation-comparison" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Technical Implementation Comparison</strong></h2><p>Understanding the practical implications of these architectural differences requires examining specific implementation details:</p><h3 id="h-identity-registry-nft-vs-flexible-addressing" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Identity Registry: NFT vs Flexible Addressing</strong></h3><p>ERC-8004's identity registry implements the <code>IERC721</code> interface, requiring implementers to handle token minting, ownership transfers, and metadata management. Agent registration involves minting an NFT that serves as the identity handle, with the token URI pointing to off-chain metadata (typically JSON) containing the agent's profile, capabilities, and endpoints.</p><pre data-type="codeBlock" text="// ERC-8004 Identity Registry (simplified)
interface IAgentIdentityRegistry is IERC721 {
    function registerAgent(address owner, string calldata metadataURI) 
        external returns (uint256 tokenId);
    
    function updateMetadata(uint256 tokenId, string calldata newURI) external;
    
    function getAgentMetadata(uint256 tokenId) 
        external view returns (string memory);
}
"><code><span class="hljs-comment">// ERC-8004 Identity Registry (simplified)</span>
<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IAgentIdentityRegistry</span> <span class="hljs-keyword">is</span> <span class="hljs-title">IERC721</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">registerAgent</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> owner, <span class="hljs-keyword">string</span> <span class="hljs-keyword">calldata</span> metadataURI</span>) 
        <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span> tokenId</span>)</span>;
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">updateMetadata</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> tokenId, <span class="hljs-keyword">string</span> <span class="hljs-keyword">calldata</span> newURI</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getAgentMetadata</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> tokenId</span>) 
        <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span></span>)</span>;
}
</code></pre><p>ACP's identity mechanism varies by implementation but typically uses simpler registry patterns:</p><pre data-type="codeBlock" text="// ACP Identity Registry (conceptual)
class ACPIdentityRegistry {
    registerAgent(address, capabilities, endpoints) {
        // Store mapping of address to agent profile
        // No NFT minting required for basic operation
    }
    
    getAgentProfile(address) {
        // Return registered capabilities and endpoints
    }
}
"><code><span class="hljs-comment">// ACP Identity Registry (conceptual)</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">ACPIdentityRegistry</span> {
    <span class="hljs-title function_">registerAgent</span>(<span class="hljs-params">address, capabilities, endpoints</span>) {
        <span class="hljs-comment">// Store mapping of address to agent profile</span>
        <span class="hljs-comment">// No NFT minting required for basic operation</span>
    }
    
    <span class="hljs-title function_">getAgentProfile</span>(<span class="hljs-params">address</span>) {
        <span class="hljs-comment">// Return registered capabilities and endpoints</span>
    }
}
</code></pre><p>This difference affects integration complexity. ERC-8004's NFT approach requires handling token transfers for ownership changes but provides built-in compatibility with existing Ethereum tooling. ACP's simpler addressing reduces registration overhead but requires custom tooling for identity management.</p><h3 id="h-reputation-mechanisms-explicit-attestations-vs-transaction-records" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Reputation Mechanisms: Explicit Attestations vs Transaction Records</strong></h3><p>ERC-8004's Reputation Registry uses explicit attestation posting with pre-authorization requirements:</p><pre data-type="codeBlock" text="// ERC-8004 Reputation Registry (simplified)
interface IAgentReputationRegistry {
    struct ReputationAttestation {
        address rater;
        uint256 agentId;
        uint256 score;  // 0-100
        string contextTag;
        string evidenceURI;
        uint256 timestamp;
    }
    
    // Server must pre-authorize client's feedback
    function authorizeRater(address rater, bytes calldata signature) external;
    
    function submitReputation(
        uint256 agentId,
        uint256 score,
        string calldata contextTag,
        string calldata evidenceURI
    ) external;
    
    function getReputationHistory(uint256 agentId) 
        external view returns (ReputationAttestation[] memory);
}
"><code><span class="hljs-comment">// ERC-8004 Reputation Registry (simplified)</span>
<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IAgentReputationRegistry</span> </span>{
    <span class="hljs-keyword">struct</span> <span class="hljs-title">ReputationAttestation</span> {
        <span class="hljs-keyword">address</span> rater;
        <span class="hljs-keyword">uint256</span> agentId;
        <span class="hljs-keyword">uint256</span> score;  <span class="hljs-comment">// 0-100</span>
        <span class="hljs-keyword">string</span> contextTag;
        <span class="hljs-keyword">string</span> evidenceURI;
        <span class="hljs-keyword">uint256</span> timestamp;
    }
    
    <span class="hljs-comment">// Server must pre-authorize client's feedback</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">authorizeRater</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> rater, <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">calldata</span> signature</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">submitReputation</span>(<span class="hljs-params">
        <span class="hljs-keyword">uint256</span> agentId,
        <span class="hljs-keyword">uint256</span> score,
        <span class="hljs-keyword">string</span> <span class="hljs-keyword">calldata</span> contextTag,
        <span class="hljs-keyword">string</span> <span class="hljs-keyword">calldata</span> evidenceURI
    </span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getReputationHistory</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> agentId</span>) 
        <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params">ReputationAttestation[] <span class="hljs-keyword">memory</span></span>)</span>;
}
</code></pre><p>ACP's reputation emerges implicitly from transaction completion records:</p><pre data-type="codeBlock" text="// ACP Transaction History (conceptual)
class ACPTransactionRegistry {
    recordCompletion(
        initiatorAddress,
        providerAddress,
        taskHash,
        evaluationResult,
        feedback
    ) {
        // Automatically creates reputation trail
        // No separate authorization step needed
    }
    
    getProviderHistory(address) {
        // Returns completed tasks with evaluation outcomes
    }
}
"><code><span class="hljs-comment">// ACP Transaction History (conceptual)</span>
<span class="hljs-keyword">class</span> <span class="hljs-title class_">ACPTransactionRegistry</span> {
    <span class="hljs-title function_">recordCompletion</span>(<span class="hljs-params">
        initiatorAddress,
        providerAddress,
        taskHash,
        evaluationResult,
        feedback
    </span>) {
        <span class="hljs-comment">// Automatically creates reputation trail</span>
        <span class="hljs-comment">// No separate authorization step needed</span>
    }
    
    <span class="hljs-title function_">getProviderHistory</span>(<span class="hljs-params">address</span>) {
        <span class="hljs-comment">// Returns completed tasks with evaluation outcomes</span>
    }
}
</code></pre><p>The explicit vs implicit distinction affects trust signal granularity. ERC-8004 enables diverse reputation providers and scoring methodologies but requires managing authorization to prevent spam. ACP's transaction-coupled approach automatically prevents spam (you can't create fake completion records) but ties reputation exclusively to protocol-mediated interactions.</p><h3 id="h-validation-patterns-pluggable-validators-vs-integrated-evaluators" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Validation Patterns: Pluggable Validators vs Integrated Evaluators</strong></h3><p>ERC-8004's Validation Registry provides a minimal interface for requesting and recording validation results:</p><pre data-type="codeBlock" text="// ERC-8004 Validation Registry (simplified)
interface IAgentValidationRegistry {
    struct ValidationRequest {
        address requester;
        address validator;
        string taskDataURI;
        bytes32 taskDataHash;
        uint256 timestamp;
    }
    
    struct ValidationResult {
        uint256 requestId;
        bool passed;
        string evidenceURI;
        uint256 timestamp;
    }
    
    function requestValidation(
        address validator,
        string calldata taskDataURI,
        bytes32 taskDataHash
    ) external returns (uint256 requestId);
    
    function submitValidation(
        uint256 requestId,
        bool passed,
        string calldata evidenceURI
    ) external;
    
    function getValidationResult(uint256 requestId) 
        external view returns (ValidationResult memory);
}
"><code><span class="hljs-comment">// ERC-8004 Validation Registry (simplified)</span>
<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IAgentValidationRegistry</span> </span>{
    <span class="hljs-keyword">struct</span> <span class="hljs-title">ValidationRequest</span> {
        <span class="hljs-keyword">address</span> requester;
        <span class="hljs-keyword">address</span> validator;
        <span class="hljs-keyword">string</span> taskDataURI;
        <span class="hljs-keyword">bytes32</span> taskDataHash;
        <span class="hljs-keyword">uint256</span> timestamp;
    }
    
    <span class="hljs-keyword">struct</span> <span class="hljs-title">ValidationResult</span> {
        <span class="hljs-keyword">uint256</span> requestId;
        <span class="hljs-keyword">bool</span> passed;
        <span class="hljs-keyword">string</span> evidenceURI;
        <span class="hljs-keyword">uint256</span> timestamp;
    }
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">requestValidation</span>(<span class="hljs-params">
        <span class="hljs-keyword">address</span> validator,
        <span class="hljs-keyword">string</span> <span class="hljs-keyword">calldata</span> taskDataURI,
        <span class="hljs-keyword">bytes32</span> taskDataHash
    </span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span> requestId</span>)</span>;
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">submitValidation</span>(<span class="hljs-params">
        <span class="hljs-keyword">uint256</span> requestId,
        <span class="hljs-keyword">bool</span> passed,
        <span class="hljs-keyword">string</span> <span class="hljs-keyword">calldata</span> evidenceURI
    </span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getValidationResult</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> requestId</span>) 
        <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params">ValidationResult <span class="hljs-keyword">memory</span></span>)</span>;
}
</code></pre><p>ACP integrates evaluation directly into the transaction workflow:</p><pre data-type="codeBlock" text="// ACP Evaluation Phase (conceptual)
class ACPTaskContract {
    async executeEvaluationPhase(taskId) {
        const task = await this.getTask(taskId);
        const evaluator = task.negotiatedEvaluator;
        
        // Evaluator verifies according to agreed criteria
        const result = await evaluator.verify(task.deliverables);
        
        if (result.passed) {
            await this.releaseEscrow(task.provider);
            await this.recordSuccess(task);
        } else {
            await this.handleFailure(task);
        }
    }
}
"><code><span class="hljs-comment">// ACP Evaluation Phase (conceptual)</span>
class ACPTaskContract {
    async executeEvaluationPhase(taskId) {
        const task <span class="hljs-operator">=</span> await <span class="hljs-built_in">this</span>.getTask(taskId);
        const evaluator <span class="hljs-operator">=</span> task.negotiatedEvaluator;
        
        <span class="hljs-comment">// Evaluator verifies according to agreed criteria</span>
        const result <span class="hljs-operator">=</span> await evaluator.verify(task.deliverables);
        
        <span class="hljs-keyword">if</span> (result.passed) {
            await <span class="hljs-built_in">this</span>.releaseEscrow(task.provider);
            await <span class="hljs-built_in">this</span>.recordSuccess(task);
        } <span class="hljs-keyword">else</span> {
            await <span class="hljs-built_in">this</span>.handleFailure(task);
        }
    }
}
</code></pre><p>ERC-8004's approach allows arbitrary validation methods (cryptographic proofs, TEE attestations, stake-based re-execution) to coexist with a standard interface. ACP's integrated model ensures validation always occurs before payment release but requires evaluators to conform to the protocol's verification workflow.</p><h2 id="h-real-world-application-the-ethiq-case-study" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Real-World Application: The EthiQ Case Study</strong></h2><p>EthiQ, a peer-to-peer donation platform, demonstrates how these protocols can be applied in practice. The platform uses Virtuals' ACP infrastructure while embodying principles aligned with ERC-8004's trust philosophy. Multiple AI agents coordinate to evaluate donation requests, verify their authenticity, and match them with appropriate donors.</p><p>The system employs specialized agents in distinct roles: verification agents assess request legitimacy and urgency, ranking agents score and prioritize candidates, and matching agents pair donors with validated opportunities. These agents communicate through ACP's structured workflow, using its negotiation phase to agree on evaluation criteria and its evaluation phase to verify outcomes before fund allocation occurs.</p><p>Each agent in the EthiQ system builds on-chain reputation through its participation in successful donations. Verification agents develop track records for accurate authenticity assessment. Ranking agents demonstrate expertise in prioritization. Matching agents prove their ability to create satisfying donor-recipient pairs. This reputation accumulation, while managed through ACP's infrastructure, mirrors ERC-8004's vision of trust emerging from verifiable historical performance.</p><p>The EthiQ implementation showcases how ACP's comprehensive workflow can implement the trust principles that ERC-8004 codifies as separate primitives. The agents rely on verifiable on-chain information rather than trusting each other blindly. Their evaluations leave permanent records that guide future decisions. The system leverages both lightweight reputation for routine operations and formal evaluation for high-stakes fund allocation. This real-world deployment validates that despite architectural differences, both approaches can achieve trustworthy autonomous agent coordination when properly implemented.</p><h2 id="h-evaluation-framework-choosing-between-approaches" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Evaluation Framework: Choosing Between Approaches</strong></h2><p>Selecting between ERC-8004 and ACP requires evaluating several key dimensions:</p><h3 id="h-use-case-alignment" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Use Case Alignment</strong></h3><p><strong>Choose ERC-8004 when:</strong></p><ul><li><p>You need modular trust primitives that integrate with existing systems</p></li><li><p>Your application requires custom payment or negotiation workflows</p></li><li><p>You're building on Ethereum mainnet or Layer 2s exclusively</p></li><li><p>You want maximum flexibility in reputation algorithms and validation methods</p></li><li><p>You're creating infrastructure that other applications will build upon</p></li></ul><p><strong>Choose ACP when:</strong></p><ul><li><p>You need a complete agent commerce solution with minimal integration work</p></li><li><p>Your use case benefits from enforced escrow and automated payment settlement</p></li><li><p>You require cross-chain agent coordination (Ethereum L2s and Solana)</p></li><li><p>You want to leverage Virtuals' existing agent network and tooling</p></li><li><p>You're building consumer-facing applications where rapid deployment matters more than architectural flexibility</p></li></ul><h3 id="h-technical-constraints" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Technical Constraints</strong></h3><p>ERC-8004 requires developers to integrate multiple protocols (identity, communication, payment, reputation) into a cohesive system. This demands stronger technical capabilities but provides architectural freedom. Teams with sophisticated blockchain development expertise who need custom workflows will appreciate this flexibility.</p><p>ACP reduces integration complexity by providing an all-in-one solution. Teams with limited blockchain expertise or tight timelines can deploy ACP-based agents more rapidly. However, this convenience comes at the cost of conforming to ACP's workflow and depending on Virtuals' infrastructure.</p><h3 id="h-ecosystem-considerations" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Ecosystem Considerations</strong></h3><p>ERC-8004's neutral positioning makes it suitable for building shared infrastructure that many applications can use. If you're creating public goods or developing standards for industry adoption, ERC-8004's credible neutrality matters.</p><p>ACP's integration with Virtuals Protocol makes it powerful for applications targeting that ecosystem. If you're building agents that will primarily interact with other Virtuals-based agents, or if you want access to Virtuals' network effects and developer tools, ACP becomes the natural choice despite tighter coupling.</p><h3 id="h-evolution-and-maintenance" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Evolution and Maintenance</strong></h3><p>ERC-8004's modular nature allows independent evolution of different system components. You can upgrade reputation algorithms, swap validation mechanisms, or adopt new payment protocols without disrupting the core identity layer. This modularity benefits long-lived systems that must adapt to changing requirements.</p><p>ACP's integrated design means protocol upgrades potentially affect all components simultaneously. Virtuals maintains the canonical implementation and drives evolution, which can be advantageous if their roadmap aligns with your needs but limiting if it doesn't.</p><h2 id="h-future-convergence-and-hybrid-approaches" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Future Convergence and Hybrid Approaches</strong></h2><p>The dichotomy between ERC-8004 and ACP may diminish as the agent ecosystem matures. Several convergence patterns appear likely:</p><h3 id="h-cross-protocol-identity-bridges" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Cross-Protocol Identity Bridges</strong></h3><p>Agents could maintain ERC-8004 identities (NFT-based) while participating in ACP transactions, using the NFT identity as the trust anchor that links to ACP registry entries. This would enable agents to build unified reputations across both ecosystems, leveraging ERC-8004's portable identity with ACP's transaction coordination.</p><h3 id="h-modular-acp-components" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Modular ACP Components</strong></h3><p>The ACP specification could evolve to support more modular adoption, allowing developers to use its negotiation workflow with alternative payment systems, or its evaluation phase with different identity schemes. This would bridge the gap between ACP's comprehensive approach and ERC-8004's composability.</p><h3 id="h-erc-8004-payment-extensions" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>ERC-8004 Payment Extensions</strong></h3><p>The Ethereum community might develop complementary standards for agent payments and escrow that integrate naturally with ERC-8004's trust primitives. This would reduce the integration burden for ERC-8004 adopters while maintaining modularity.</p><h3 id="h-reputation-aggregation-services" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Reputation Aggregation Services</strong></h3><p>Third-party services could aggregate reputation signals from both ERC-8004 registries and ACP transaction histories, providing unified trust scores that work across protocols. This would enable agents to build portable reputations regardless of which coordination protocol they use.</p><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Conclusion</strong></h2><p>ERC-8004 and ACP represent complementary approaches to establishing trust in autonomous agent ecosystems. ERC-8004 provides modular, composable trust primitives—identity, reputation, and validation registries—that developers can integrate into diverse systems with maximum flexibility. ACP delivers a comprehensive agent commerce protocol that orchestrates the entire transaction lifecycle with built-in enforcement and payment coordination.</p><p>The choice between these frameworks depends on your specific requirements. Projects needing architectural flexibility, custom workflows, or neutral infrastructure foundations will find ERC-8004's minimal, composable design advantageous. Applications prioritizing rapid deployment, automated enforcement, or tight integration with existing agent networks will benefit from ACP's comprehensive solution.</p><p>Rather than viewing these as competing standards, developers should recognize them as addressing different points on the trust infrastructure spectrum. ERC-8004 excels as foundational infrastructure that enables diverse implementations, while ACP provides a production-ready system for immediate deployment. As the autonomous agent economy matures, we may see hybrid approaches emerge that combine ERC-8004's portable trust primitives with ACP's orchestration capabilities, creating even more robust frameworks for trustworthy agent coordination.</p><p>The technical community's challenge now lies in driving adoption of these trust mechanisms—whether through ERC-8004's modular building blocks or ACP's integrated platform—to realize the vision of autonomous agents that can discover, trust, and collaborate across organizational boundaries without centralized intermediaries.<br><br>Real-World Example: EthiQ Aligning ACP with ERC‑8004 Concepts</p><p>To ground this comparison, consider <a target="_blank" rel="noopener noreferrer nofollow" class="dont-break-out graf markup--anchor markup--anchor-readOnly" href="https://ethiq.us/"><strong>EthiQ</strong></a>, a peer-to-peer donation platform that leverages Virtuals’ ACP while embracing ERC‑8004’s trust philosophy. EthiQ uses multiple AI agents to evaluate and match donation requests with donors, and these agents <strong>coordinate via ACP</strong> on the Virtuals network. For instance, one agent might verify the authenticity and urgency of a charitable request (providing a <strong>verified trust signal</strong>), while another agent ranks and matches donors to those requests. Through ACP, EthiQ’s agents <strong>share verified scores, coordinate on evaluating candidates, and reach consensus on fund allocation</strong> – all actions that are anchored on-chain for transparency. Each agent in the EthiQ system has a defined role and communicates through standard protocols under ethical guardrails. In essence, EthiQ shows how a project can use ACP’s end-to-end coordination but still align with the <strong>ERC‑8004 trust model concept</strong>: the agents rely on verifiable on-chain information and <strong>cross-agent trust signals</strong> to make decisions, rather than trusting each other blindly. This demonstrates the practical synergy of both approaches – <strong>ERC‑8004’s ideas of on-chain identity, reputation, and validation are being realized within ACP’s operational network</strong>, guiding real-world autonomous agent interactions toward accountable and trustworthy outcomes.</p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <category>erc8004</category>
            <category>acp</category>
            <category>virtuals.io</category>
            <category>moltbot</category>
            <category>codislaw</category>
            <category>aiagents</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/56cb8bab61151cda7096726eae756656f18ac980103382fe4a1c0e4e4d5a55a2.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[ETHIQ AIRDROP]]></title>
            <link>https://paragraph.com/@tadros/ethiq-airdrop</link>
            <guid>UAX9bSELICOMB08luXOF</guid>
            <pubDate>Tue, 06 Jan 2026 00:17:56 GMT</pubDate>
            <description><![CDATA[A total of $500,000 USDC and 50,000,000 vested $ETHIQ will be distributed to participants who demonstrate kindness, conviction, and consistent on-chain engagement. This guide explains how to qualify, how points are calculated, and how to position yourself for the highest possible allocation.1. Understanding the RewardsThe airdrop reward pool consists of:$500,000 USDC50,000,000 vested $ETHIQRewards are not distributed equally. Your share is determined by the Solidarity Points you accumulate th...]]></description>
            <content:encoded><![CDATA[<p>A total of <strong>$500,000 USDC</strong> and <strong>50,000,000 vested $ETHIQ</strong> will be distributed to participants who demonstrate kindness, conviction, and consistent on-chain engagement.</p><p>This guide explains how to qualify, how points are calculated, and how to position yourself for the <strong>highest possible allocation</strong>.</p><hr><h1 id="h-1-understanding-the-rewards" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. Understanding the Rewards</h1><p>The airdrop reward pool consists of:</p><ul><li><p><strong>$500,000 USDC</strong></p></li><li><p><strong>50,000,000 vested $ETHIQ</strong></p></li></ul><p>Rewards are not distributed equally.<br>Your share is determined by the <strong>Solidarity Points</strong> you accumulate throughout the campaign.</p><p>Your points reflect:</p><ul><li><p>The amount of <strong>ETHIQ you hold</strong></p></li><li><p>The amount of <strong>ETHIQ you stake</strong></p></li><li><p>The amount of <strong>USDC you donate</strong></p></li><li><p>Your consistency across all snapshots</p></li></ul><p>The more points you earn, the larger your portion of the reward pool.</p><hr><h1 id="h-2-how-points-are-calculated" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. How Points Are Calculated</h1><p>Solidarity Points are generated from three core actions:</p><table style="min-width: 50px"><colgroup><col><col></colgroup><tbody><tr><th colspan="1" rowspan="1"><p>Action</p></th><th colspan="1" rowspan="1"><p>Points per $1 value</p></th></tr><tr><td colspan="1" rowspan="1"><p>ETHIQ staked</p></td><td colspan="1" rowspan="1"><p>12 points</p></td></tr><tr><td colspan="1" rowspan="1"><p>ETHIQ held at snapshot</p></td><td colspan="1" rowspan="1"><p>6 points</p></td></tr><tr><td colspan="1" rowspan="1"><p>USDC donated via <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://app.ethiq.us">app.ethiq.us</a></p></td><td colspan="1" rowspan="1"><p>3 points</p></td></tr></tbody></table><p>Your points are measured <strong>at every snapshot</strong>, not just once.<br>Consistency strongly increases your final allocation.</p><hr><h1 id="h-3-airdrop-flow-overview" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. Airdrop Flow (Overview)</h1><p>Below is the full process from start to finish:</p><pre data-type="codeBlock" text="Create Wallet → Connect to Base
↓
Buy ETHIQ via Virtuals
↓
Complete Proof of Kindness (Galxe)
↓
Donate &amp; Interact via app.ethiq.us
↓
Claim Proof of Solidarity (Galxe)
↓
Accumulate Points Across Snapshots
↓
Receive Share of Rewards
"><code>Create Wallet → Connect to Base
↓
Buy ETHIQ via Virtuals
↓
Complete Proof of Kindness (Galxe)
↓
Donate <span class="hljs-operator">&amp;</span> Interact via app.ethiq.us
↓
Claim Proof of Solidarity (Galxe)
↓
Accumulate Points Across Snapshots
↓
Receive Share of Rewards
</code></pre><hr><h1 id="h-4-step-by-step-how-to-join-and-earn-rewards" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. Step-by-Step: How to Join and Earn Rewards</h1><h2 id="h-step-1-create-an-evm-wallet-and-connect-to-base" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step 1: Create an EVM Wallet and Connect to Base</h2><p>You can use MetaMask, Rabby, or any EVM-compatible wallet.</p><p>Add the Base network:</p><ul><li><p>RPC: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mainnet.base.org">https://mainnet.base.org</a></p></li><li><p>Chain ID: 8453</p></li><li><p>Currency: ETH</p></li><li><p>Explorer: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://basescan.org">https://basescan.org</a></p></li></ul><p>You will also need a small amount of ETH on Base for gas fees.</p><hr><h2 id="h-step-2-buy-ethiq-your-highest-point-multiplier" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step 2: Buy ETHIQ (Your Highest Point Multiplier)</h2><p>To begin earning points, you need <strong>ETHIQ on Base</strong>.</p><h3 id="h-21-acquire-virtual-if-needed" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.1 Acquire VIRTUAL (if needed)</h3><p>Purchase VIRTUAL on a CEX or DEX, then bridge or deposit it to Base.</p><h3 id="h-22-buy-ethiq" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2.2 Buy ETHIQ</h3><p>Use the Virtuals prototype:<br><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.virtuals.io/prototypes/0x9B1bBBa7C0BBaAF22315a939a19448559D605890"><strong>https://app.virtuals.io/prototypes/0x9B1bBBa7C0BBaAF22315a939a19448559D605890</strong></a></p><p>Holding and staking ETHIQ are the strongest point generators:</p><ul><li><p>Holding earns <strong>6 points per $1</strong></p></li><li><p>Staking earns <strong>12 points per $1</strong></p></li></ul><p>ETHIQ is the foundation of your score.</p><hr><h2 id="h-step-3-complete-proof-of-kindness" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step 3: Complete Proof of Kindness</h2><p>This step is required to unlock the airdrop.</p><p>Go to the Galxe quest:<br><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.galxe.com/quest/atomiclodge/GCLfst8c6v"><strong>https://app.galxe.com/quest/atomiclodge/GCLfst8c6v</strong></a></p><p>Connect your wallet and complete the tasks.<br>Mint your <strong>Proof of Kindness OAT</strong>.</p><p>Without this OAT, you are not eligible for the campaign.</p><hr><h2 id="h-step-4-make-a-donation-via-appethiqus" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step 4: Make a Donation via <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://app.ethiq.us">app.ethiq.us</a></h2><p>Your on-chain impact is measured here.</p><p>Visit: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://app.ethiq.us"><strong>app.ethiq.us</strong></a><br>Connect your wallet on Base, choose a mission, and donate USDC.</p><p>Donations generate:</p><ul><li><p><strong>3 points for every $1 USDC donated</strong></p></li></ul><p>This action also unlocks eligibility for Proof of Solidarity.</p><hr><h2 id="h-step-5-claim-proof-of-solidarity" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Step 5: Claim Proof of Solidarity</h2><p>Go to the Galxe quest:<br><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.galxe.com/quest/atomiclodge/GCtPVtYYkE"><strong>https://app.galxe.com/quest/atomiclodge/GCtPVtYYkE</strong></a></p><p>Galxe checks:</p><ul><li><p>Did you complete Proof of Kindness?</p></li><li><p>Did you make a donation?</p></li><li><p>Are you holding ETHIQ at snapshot time?</p></li></ul><p>Once verified, mint your <strong>Proof of Solidarity OAT</strong>.</p><p>This OAT officially links your impact to the airdrop system.</p><hr><h1 id="h-5-how-rewards-are-determined" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. How Rewards Are Determined</h1><p>Your total rewards depend on:</p><ul><li><p>Your cumulative points</p></li><li><p>Your ranking on the leaderboard</p></li><li><p>Your consistency across snapshots</p></li></ul><h3 id="h-points-engine-diagram" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Points Engine Diagram</h3><pre data-type="codeBlock" text="ETHIQ Held        → 6 points per $1
ETHIQ Staked      → 12 points per $1
USDC Donated      → 3 points per $1
---------------------------------------
Total Solidarity Points
↓
Leaderboard Ranking
↓
Share of $500k USDC + 50M ETHIQ
"><code>ETHIQ Held        → <span class="hljs-number">6</span> points per $1
ETHIQ Staked      → <span class="hljs-number">12</span> points per $1
USDC Donated      → <span class="hljs-number">3</span> points per $1
<span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span>
Total Solidarity Points
↓
Leaderboard Ranking
↓
Share of $500k USDC <span class="hljs-operator">+</span> 50M ETHIQ
</code></pre><p>Snapshot consistency is one of the strongest factors.<br>Participants who act early and remain active will have significantly higher scores.</p><hr><h1 id="h-6-track-your-progress" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6. Track Your Progress</h1><p>Your rank and total points are displayed on the ETHIQ Leaderboard:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethiq.us/leaderboard"><strong>https://ethiq.us/leaderboard</strong></a></p><p>The leaderboard updates as:</p><ul><li><p>You accumulate more points</p></li><li><p>Snapshots occur</p></li><li><p>Other users move above or below you</p></li></ul><p>Your position on the leaderboard is the clearest indicator of your future airdrop allocation.</p><hr><h1 id="h-7-summary-how-to-maximize-your-allocation" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">7. Summary: How to Maximize Your Allocation</h1><p>To optimize your rewards:</p><ol><li><p><strong>Buy and hold ETHIQ</strong></p></li><li><p><strong>Stake ETHIQ</strong> for the highest multiplier</p></li><li><p><strong>Donate USDC</strong> via the AI Agent for additional points</p></li><li><p>Complete <strong>Proof of Kindness</strong> and <strong>Proof of Solidarity</strong></p></li><li><p>Stay active across all snapshots</p></li><li><p>Monitor your ranking on the leaderboard</p></li></ol><p>Your commitment, consistency, and impact directly determine your share of the <strong>$500,000 USDC + 50,000,000 $ETHIQ</strong> pool.</p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <category>ethiq</category>
            <category>base</category>
            <category>airdrop</category>
            <category>virtuals.io</category>
            <category>humanaid</category>
            <category>donation</category>
            <category>p2p</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/e33b9424ce613a3041621e60d06a6aa4937b3a069cb4315c369981a226a1ffe0.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Running and Registering an Aztec Sequencer with a dRPC RPC Endpoint]]></title>
            <link>https://paragraph.com/@tadros/running-and-registering-an-aztec-sequencer-with-a-drpc-rpc-endpoint</link>
            <guid>zWOGUfqRMTYaeeERPO9f</guid>
            <pubDate>Wed, 03 Dec 2025 03:22:29 GMT</pubDate>
            <description><![CDATA[Running a sequencer (validator) on the Aztec testnet involves more than just launching a container; you must install Docker, generate a proper keystore, configure your environment, and register your node on L1. Below is a step‑by‑step narrative that captures the entire process, including installing Docker and Docker Compose, and introduces how to incorporate a dRPC RPC endpoint for your Ethereum RPC needs.1. Install Docker and Docker ComposeBefore you can run any Aztec node, you need Docker a...]]></description>
            <content:encoded><![CDATA[<p>Running a sequencer (validator) on the Aztec testnet involves more than just launching a container; you must install Docker, generate a proper keystore, configure your environment, and register your node on L1.&nbsp; Below is a step‑by‑step narrative that captures the entire process, including installing Docker and Docker Compose, and introduces how to incorporate a dRPC RPC endpoint for your Ethereum RPC needs.</p><h2 id="h-1-install-docker-and-docker-compose" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. Install Docker and Docker Compose</h2><p>Before you can run any Aztec node, you need Docker and Docker Compose installed.&nbsp; On a fresh Linux server, you can install them with these commands (run as root or with sudo):</p><pre data-type="codeBlock" text="# Update and upgrade your system
apt-get update &amp;&amp; apt-get upgrade -y

# Install prerequisites
apt-get install -y ca-certificates curl lsb-release gnupg

# Remove any old Docker packages
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do \
  apt-get remove --purge -y &quot;$pkg&quot; || true; \
done
apt-get autoremove -y

# Add Docker’s official GPG key
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

# Add the Docker repository
echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&quot; \
  &gt; /etc/apt/sources.list.d/docker.list

# Install Docker Engine and Docker Compose plugin
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Enable and start the Docker service
systemctl enable docker
systemctl start docker

# Verify installation
docker --version
docker compose version"><code># Update and upgrade your system
apt<span class="hljs-operator">-</span>get update <span class="hljs-operator">&amp;</span><span class="hljs-operator">&amp;</span> apt<span class="hljs-operator">-</span>get upgrade <span class="hljs-operator">-</span>y

# Install prerequisites
apt<span class="hljs-operator">-</span>get install <span class="hljs-operator">-</span>y ca<span class="hljs-operator">-</span>certificates curl lsb<span class="hljs-operator">-</span>release gnupg

# Remove any old Docker packages
<span class="hljs-keyword">for</span> pkg in docker.io docker<span class="hljs-operator">-</span>doc docker<span class="hljs-operator">-</span>compose podman<span class="hljs-operator">-</span>docker containerd runc; do \
  apt<span class="hljs-operator">-</span>get remove <span class="hljs-operator">-</span><span class="hljs-operator">-</span>purge <span class="hljs-operator">-</span>y <span class="hljs-string">"$pkg"</span> <span class="hljs-operator">|</span><span class="hljs-operator">|</span> <span class="hljs-literal">true</span>; \
done
apt<span class="hljs-operator">-</span>get autoremove <span class="hljs-operator">-</span>y

# Add Docker’s official GPG key
install <span class="hljs-operator">-</span>m 0755 <span class="hljs-operator">-</span>d <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>apt<span class="hljs-operator">/</span>keyrings
curl <span class="hljs-operator">-</span>fsSL https:<span class="hljs-comment">//download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg</span>
chmod a<span class="hljs-operator">+</span>r <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>apt<span class="hljs-operator">/</span>keyrings<span class="hljs-operator">/</span>docker.gpg

# Add the Docker repository
echo \
  <span class="hljs-string">"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"</span> \
  <span class="hljs-operator">&gt;</span> <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>apt<span class="hljs-operator">/</span>sources.list.d/docker.list

# Install Docker Engine and Docker Compose plugin
apt<span class="hljs-operator">-</span>get update
apt<span class="hljs-operator">-</span>get install <span class="hljs-operator">-</span>y docker<span class="hljs-operator">-</span>ce docker<span class="hljs-operator">-</span>ce<span class="hljs-operator">-</span>cli containerd.io docker<span class="hljs-operator">-</span>buildx<span class="hljs-operator">-</span>plugin docker<span class="hljs-operator">-</span>compose<span class="hljs-operator">-</span>plugin

# Enable and start the Docker service
systemctl enable docker
systemctl start docker

# Verify installation
docker <span class="hljs-operator">-</span><span class="hljs-operator">-</span>version
docker compose version</code></pre><p>This sequence updates your system, removes old Docker packages, adds Docker’s official repository, installs the latest Docker and Docker Compose, and verifies that both are available.&nbsp; Once installed, you’re ready to set up the Aztec keystore and node.</p><h2 id="h-2-install-the-aztec-cli" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. Install the Aztec CLI</h2><p>Before generating a keystore, you must install the Aztec CLI.&nbsp; Aztec provides an installation script that downloads the binaries and sets up the CLI in ~/.aztec/bin.&nbsp; Run the following command on your server:<br></p><pre data-type="codeBlock" text="bash -i &lt;(curl -s https://install.aztec.network)"><code>bash <span class="hljs-operator">-</span>i <span class="hljs-operator">&lt;</span>(curl <span class="hljs-operator">-</span>s https:<span class="hljs-comment">//install.aztec.network)</span></code></pre><p>The script may prompt you to add ~/.aztec/bin to your PATH.&nbsp; If it does, or if you find that aztec is not found after installation, update your shell profile manually.&nbsp; For example, add this line to your ~/.bashrc or ~/.bash_profile:</p><pre data-type="codeBlock" text="echo 'export PATH=&quot;$HOME/.aztec/bin:$PATH&quot;' &gt;&gt; ~/.bashrc
source ~/.bashrc"><code>echo <span class="hljs-string">'export PATH="$HOME/.aztec/bin:$PATH"'</span> <span class="hljs-operator">&gt;</span><span class="hljs-operator">&gt;</span> <span class="hljs-operator">~</span><span class="hljs-operator">/</span>.bashrc
source <span class="hljs-operator">~</span><span class="hljs-operator">/</span>.bashrc</code></pre><p>After installation, verify that the CLI works:</p><pre data-type="codeBlock" text="aztec --version"><code>aztec <span class="hljs-operator">-</span><span class="hljs-operator">-</span>version</code></pre><p>You should see the CLI version number printed.&nbsp; With the CLI installed and on your PATH, you can proceed to generate your keystore.</p><br><h2 id="h-3-generate-a-sequencer-keystore" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. Generate a Sequencer Keystore</h2><p>Aztec sequencers require both an Ethereum signing key and a BLS key for attestation.&nbsp; These are bundled together in a keystore.&nbsp; Use the Aztec CLI to generate it.&nbsp; Because the protocol doesn’t yet use fee recipients, you can pass the 32‑byte zero address for the --fee‑recipient flag (the CLI rejects 20‑byte addresses).&nbsp; The command writes a JSON keystore file to ~/.aztec/keystore and prints the attester’s Ethereum address and BLS key <span data-name="regional_indicator_a" class="emoji" data-type="emoji">🇦</span> </p><pre data-type="codeBlock" text="aztec validator-keys new \
  --fee-recipient 0x0000000000000000000000000000000000000000000000000000000000000000"><code>aztec validator<span class="hljs-operator">-</span>keys <span class="hljs-keyword">new</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>fee<span class="hljs-operator">-</span>recipient <span class="hljs-number">0x0000000000000000000000000000000000000000000000000000000000000000</span></code></pre><p>The resulting key1.json file contains objects such as attester.eth and attester.bls.&nbsp; These are your validator’s Ethereum address and BLS private key.&nbsp; It also includes an optional coinbase field (the L1 address where rewards are sent) and a feeRecipient field for L2 fees (currently unused)&nbsp;</p><h2 id="h-4-update-environment-variables" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. Update Environment Variables</h2><p>Aztec’s v2.1.x releases replace the older ETHEREUM_RPC_URL and CONSENSUS_BEACON_URL with new variables that accept comma‑separated lists of endpoints.&nbsp; A minimal .env file should specify the data and key directories, the L1 execution and consensus hosts, and network ports&nbsp;</p><pre data-type="codeBlock" text="# Core paths and logging
DATA_DIRECTORY=/root/.aztec/data
KEY_STORE_DIRECTORY=/root/.aztec/keystore
LOG_LEVEL=info

# L1 RPC endpoints — replace these with your own URLs
ETHEREUM_HOSTS=&lt;YOUR_ETHEREUM_RPC_ENDPOINT&gt;
L1_CONSENSUS_HOST_URLS=&lt;YOUR_BEACON_CONSENSUS_RPC&gt;

# P2P and API configuration — fill in your own IP address and change ports if necessary
P2P_IP=&lt;YOUR_PUBLIC_IP&gt;
P2P_PORT=40400
AZTEC_PORT=8080
AZTEC_ADMIN_PORT=8880"><code><span class="hljs-comment"># Core paths and logging</span>
<span class="hljs-attr">DATA_DIRECTORY</span>=/root/.aztec/data
<span class="hljs-attr">KEY_STORE_DIRECTORY</span>=/root/.aztec/keystore
<span class="hljs-attr">LOG_LEVEL</span>=info

<span class="hljs-comment"># L1 RPC endpoints — replace these with your own URLs</span>
<span class="hljs-attr">ETHEREUM_HOSTS</span>=&lt;YOUR_ETHEREUM_RPC_ENDPOINT&gt;
<span class="hljs-attr">L1_CONSENSUS_HOST_URLS</span>=&lt;YOUR_BEACON_CONSENSUS_RPC&gt;

<span class="hljs-comment"># P2P and API configuration — fill in your own IP address and change ports if necessary</span>
<span class="hljs-attr">P2P_IP</span>=&lt;YOUR_PUBLIC_IP&gt;
<span class="hljs-attr">P2P_PORT</span>=<span class="hljs-number">40400</span>
<span class="hljs-attr">AZTEC_PORT</span>=<span class="hljs-number">8080</span>
<span class="hljs-attr">AZTEC_ADMIN_PORT</span>=<span class="hljs-number">8880</span></code></pre><p>If you include a COINBASE variable, Aztec will pay L1 rewards there; if omitted, the rewards default to your attester’s address .&nbsp; The keystore file is mounted into the container via KEY_STORE_DIRECTORY, so the node can read the private keys.</p><br><br><h2 id="h-5-create-or-update-docker-composeyml-for-the-latest-version" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. Create or Update&nbsp;docker-compose.yml for the Latest Version</h2><p>To run your sequencer, you need a compose file that uses the latest stable Aztec image and references the environment variables defined in your .env.&nbsp; Below is an example docker-compose.yml that works with the v2.1.5 release and uses the new KEY_STORE_DIRECTORY and DATA_DIRECTORY variables .&nbsp; You can place this file alongside your .env:<br><br></p><pre data-type="codeBlock" text="version: &quot;3.8&quot;

services:
  aztec-sequencer:
    container_name: aztec-sequencer
    image: aztecprotocol/aztec:2.1.5
    restart: unless-stopped
    network_mode: host
    environment:
      KEY_STORE_DIRECTORY: ${KEY_STORE_DIRECTORY}
      DATA_DIRECTORY: ${DATA_DIRECTORY}
      LOG_LEVEL: ${LOG_LEVEL}
      ETHEREUM_HOSTS: ${ETHEREUM_HOSTS}
      L1_CONSENSUS_HOST_URLS: ${L1_CONSENSUS_HOST_URLS}
      P2P_IP: ${P2P_IP}
      P2P_PORT: ${P2P_PORT}
      AZTEC_PORT: ${AZTEC_PORT}
      AZTEC_ADMIN_PORT: ${AZTEC_ADMIN_PORT}
    entrypoint: &gt;-
      node --no-warnings /usr/src/yarn-project/aztec/dest/bin/index.js start --network testnet --node --archiver --sequencer
    ports:
      - &quot;${P2P_PORT}:${P2P_PORT}/tcp&quot;
      - &quot;${P2P_PORT}:${P2P_PORT}/udp&quot;
      - &quot;${AZTEC_PORT}:${AZTEC_PORT}&quot;
    volumes:
      - ${DATA_DIRECTORY}:/var/lib/data
      - ${KEY_STORE_DIRECTORY}:/var/lib/keystore"><code>version: <span class="hljs-string">"3.8"</span>

services:
  aztec<span class="hljs-operator">-</span>sequencer:
    container_name: aztec<span class="hljs-operator">-</span>sequencer
    image: aztecprotocol<span class="hljs-operator">/</span>aztec:<span class="hljs-number">2.1</span><span class="hljs-number">.5</span>
    restart: unless<span class="hljs-operator">-</span>stopped
    network_mode: host
    environment:
      KEY_STORE_DIRECTORY: ${KEY_STORE_DIRECTORY}
      DATA_DIRECTORY: ${DATA_DIRECTORY}
      LOG_LEVEL: ${LOG_LEVEL}
      ETHEREUM_HOSTS: ${ETHEREUM_HOSTS}
      L1_CONSENSUS_HOST_URLS: ${L1_CONSENSUS_HOST_URLS}
      P2P_IP: ${P2P_IP}
      P2P_PORT: ${P2P_PORT}
      AZTEC_PORT: ${AZTEC_PORT}
      AZTEC_ADMIN_PORT: ${AZTEC_ADMIN_PORT}
    entrypoint: <span class="hljs-operator">&gt;</span><span class="hljs-operator">-</span>
      node <span class="hljs-operator">-</span><span class="hljs-operator">-</span>no<span class="hljs-operator">-</span>warnings <span class="hljs-operator">/</span>usr<span class="hljs-operator">/</span>src<span class="hljs-operator">/</span>yarn<span class="hljs-operator">-</span>project<span class="hljs-operator">/</span>aztec<span class="hljs-operator">/</span>dest<span class="hljs-operator">/</span>bin<span class="hljs-operator">/</span>index.js start <span class="hljs-operator">-</span><span class="hljs-operator">-</span>network testnet <span class="hljs-operator">-</span><span class="hljs-operator">-</span>node <span class="hljs-operator">-</span><span class="hljs-operator">-</span>archiver <span class="hljs-operator">-</span><span class="hljs-operator">-</span>sequencer
    ports:
      <span class="hljs-operator">-</span> <span class="hljs-string">"${P2P_PORT}:${P2P_PORT}/tcp"</span>
      <span class="hljs-operator">-</span> <span class="hljs-string">"${P2P_PORT}:${P2P_PORT}/udp"</span>
      <span class="hljs-operator">-</span> <span class="hljs-string">"${AZTEC_PORT}:${AZTEC_PORT}"</span>
    volumes:
      <span class="hljs-operator">-</span> ${DATA_DIRECTORY}:<span class="hljs-operator">/</span><span class="hljs-keyword">var</span><span class="hljs-operator">/</span>lib<span class="hljs-operator">/</span>data
      <span class="hljs-operator">-</span> ${KEY_STORE_DIRECTORY}:<span class="hljs-operator">/</span><span class="hljs-keyword">var</span><span class="hljs-operator">/</span>lib<span class="hljs-operator">/</span>keystore</code></pre><p>Once this file is saved, run the following commands to download the new image and start the node:</p><pre data-type="codeBlock" text="docker compose pull     # fetch the v2.1.5 image from Docker Hub [oai_citation:5‡docs.aztec.network](https://docs.aztec.network/the_aztec_network/operation/operator_faq#:~:text=)
docker compose down     # stop any existing container to apply configuration changes
docker compose up -d    # recreate and start the sequencer in the background"><code>docker compose pull     <span class="hljs-comment"># fetch the v2.1.5 image from Docker Hub [oai_citation:5‡docs.aztec.network](https://docs.aztec.network/the_aztec_network/operation/operator_faq#:~:text=)</span>
docker compose down     <span class="hljs-comment"># stop any existing container to apply configuration changes</span>
docker compose up -d    <span class="hljs-comment"># recreate and start the sequencer in the background</span></code></pre><p>These commands ensure you always run the updated image rather than reusing a cached version.&nbsp; If you have already pulled the image, you can omit docker compose pull, but it’s good practice to include it when upgrading.<br></p><br><h2 id="h-6-register-your-sequencer-on-l1" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6. Register Your Sequencer on L1</h2><p>Once your node is running and has caught up with the L2 chain, you must register it as a validator.&nbsp; Use a funding account (an Ethereum wallet with Sepolia ETH) to pay for the transaction; do not use your validator’s private key .&nbsp; The command requires your L1 RPC endpoint, network name (testnet for Sepolia), the funding key, your attester’s Ethereum address, a withdrawer address (often the same as the attester), your BLS private key and the rollup contract address .&nbsp; For the Sepolia testnet the rollup contract is 0xebd99ff0ff6677205509ae73f93d0ca52ac85d67&nbsp;</p><br><pre data-type="codeBlock" text="aztec add-l1-validator \
  --l1-rpc-urls &lt;YOUR_L1_RPC_URL&gt; \
  --network testnet \
  --private-key &lt;FUNDING_PRIVATE_KEY&gt; \
  --attester &lt;YOUR_ATTESTER_ETH_ADDRESS&gt; \
  --withdrawer &lt;YOUR_WITHDRAWER_ETH_ADDRESS&gt; \
  --bls-secret-key &lt;YOUR_BLS_PRIVATE_KEY&gt; \
  --rollup 0xebd99ff0ff6677205509ae73f93d0ca52ac85d67"><code>aztec add<span class="hljs-operator">-</span>l1<span class="hljs-operator">-</span>validator \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>l1<span class="hljs-operator">-</span>rpc<span class="hljs-operator">-</span>urls <span class="hljs-operator">&lt;</span>YOUR_L1_RPC_URL<span class="hljs-operator">&gt;</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>network testnet \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-keyword">private</span><span class="hljs-operator">-</span>key <span class="hljs-operator">&lt;</span>FUNDING_PRIVATE_KEY<span class="hljs-operator">&gt;</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>attester <span class="hljs-operator">&lt;</span>YOUR_ATTESTER_ETH_ADDRESS<span class="hljs-operator">&gt;</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>withdrawer <span class="hljs-operator">&lt;</span>YOUR_WITHDRAWER_ETH_ADDRESS<span class="hljs-operator">&gt;</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>bls<span class="hljs-operator">-</span>secret<span class="hljs-operator">-</span>key <span class="hljs-operator">&lt;</span>YOUR_BLS_PRIVATE_KEY<span class="hljs-operator">&gt;</span> \
  <span class="hljs-operator">-</span><span class="hljs-operator">-</span>rollup <span class="hljs-number">0xebd99ff0ff6677205509ae73f93d0ca52ac85d67</span></code></pre><p>After submitting the transaction, monitor it on a Sepolia block explorer.&nbsp; Once confirmed, your node becomes an official validator and can propose/attest blocks&nbsp;</p><br><h2 id="h-7-setting-up-a-drpc-rpc-endpoint" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">7. Setting up a dRPC RPC Endpoint</h2><p>Instead of relying on public RPC endpoints, you can provision your own endpoint through dRPC.&nbsp; dRPC’s documentation explains that you first need to create an account or log in using a wallet, email or Google .&nbsp; Once authenticated, you create a new dRPC key.&nbsp; dRPC keys separate different applications, allow you to set daily request limits and provide usage statistics .&nbsp; Each key has its own set of endpoints; an endpoint consists of the base dRPC URL, the selected network and your key value .</p><br><p>To configure your Aztec node to use a dRPC endpoint, take the following steps:</p><br><ol><li><p>Create the key: In the dRPC dashboard (after logging in), choose Create key, specify a name and desired rate limit, and save.&nbsp; dRPC will display a list of base URLs for different networks; copy the one for sepolia.</p></li><li><p>Replace your RPC URLs: In your .env, update ETHEREUM_HOSTS with the dRPC Sepolia URL followed by your key value.&nbsp; If dRPC provides a separate consensus endpoint, also update L1_CONSENSUS_HOST_URLS.&nbsp; This routes all L1 calls through dRPC’s infrastructure.</p></li><li><p>Restart the node: Run docker compose down and docker compose up -d to apply the new endpoints.&nbsp; Your node will now use the dRPC backend for Ethereum calls.</p><p>If you don’t yet have a dRPC account, sign up and obtain a key via<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://drpc.org?ref=5ee4ac"> https://drpc.org?ref=5ee4ac</a>.&nbsp; The referral link above takes you directly to dRPC’s signup page, where you can generate keys for multiple networks and monitor their usage.&nbsp; Once you’ve created a key, follow the steps above to integrate it into your Aztec configuration.</p></li></ol><br><br><p>By using a dedicated dRPC endpoint, you gain more stable throughput and better monitoring of your request usage compared with public RPC services.&nbsp; Because the endpoint includes your private key token, make sure you keep the URL secret and rotate it if you suspect compromise.</p><br><br><h2 id="h-8-use-sepolia-addresses-and-obtain-sepolia-eth" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">8. Use Sepolia Addresses and Obtain Sepolia ETH</h2><p>When configuring your sequencer, ensure that every address and RPC endpoint corresponds to the Sepolia network.&nbsp; Your funding account, attester address and withdrawer address must all be Sepolia wallets; using a mainnet address or RPC will result in failed transactions or incorrect behaviour.&nbsp; In particular:</p><br><ul><li><p>L1 RPC URLs: ETHEREUM_HOSTS and L1_CONSENSUS_HOST_URLS should point to Sepolia endpoints (for example, dRPC’s Sepolia RPC or another reliable provider).&nbsp; Do not point them at mainnet or Görli RPCs.</p></li><li><p>Funding account: The --private-key flag in the registration step must be a Sepolia account funded with Sepolia ETH .</p></li><li><p>Attester/withdrawer: These addresses come from your keystore’s attester.eth field; they are also Sepolia accounts.&nbsp; Never re‑use mainnet addresses here.</p></li></ul><br><br><p>If you need Sepolia ETH, you can mine it using the official PoW faucet.&nbsp; Visit the mining page (for example, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://sepolia-faucet.pk910.de/#/mine/486d64b1-01bb-476f-a643-56430a1a286f">Sepolia PoW Faucet</a>) and follow the instructions to start mining.&nbsp; The page displays your mining reward, hashrate, minimum and maximum claim values, remaining session time and other statistics.&nbsp; Once you accumulate enough shares, click Stop Mining &amp; Claim Rewards to send Sepolia ETH to your specified address.&nbsp; This faucet is the recommended method to obtain Sepolia ETH for validator registration and staking.</p><br><div data-type="callout" type="tip"><link rel="preload" as="image" href="https://paragraph.com/editor/callout/tip-icon.png"><div class="callout-base callout-tip" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.com/editor/callout/tip-icon.png" class="callout-button"><div class="callout-content"><div><p>Summary: Running an Aztec sequencer on the Sepolia testnet requires generating a keystore (with Ethereum and BLS keys), setting up your environment to use the new ETHEREUM_HOSTS/L1_CONSENSUS_HOST_URLS variables, creating a docker‑compose.yml using the latest image, and registering your validator on L1 with a Sepolia‑funded account and the testnet rollup address.&nbsp; If desired, configure a dRPC RPC endpoint for more reliable L1 calls.&nbsp; Always ensure every address and RPC endpoint you supply is on the Sepolia network, and use the Sepolia PoW faucet to obtain the ETH needed for funding and staking .&nbsp; Properly separating your funding key from your validator keys and keeping your dRPC key secret are essential security practices.</p></div></div></div></div><br>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <category>aztec</category>
            <category>node</category>
            <category>prover</category>
            <category>layer2</category>
            <category>simontadros</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/da01917ce62ba87de5237ef4cfa7a95a002ac75ea2cd9b0100ab656b1fae3391.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Forget Market Cap — Here’s the Real Size of BTC, ETH & SOL]]></title>
            <link>https://paragraph.com/@tadros/forget-market-cap-—-heres-the-real-size-of-btc-eth-and-sol</link>
            <guid>PBBMgiFjWgFiaJt0ZAE5</guid>
            <pubDate>Mon, 24 Nov 2025 05:52:21 GMT</pubDate>
            <description><![CDATA[Bitcoin is not at 1.7T. Ethereum is not at 340B. Solana is not at 71B.AssetMarket Cap (Displayed)Real Exchange Liquidity (Tradable Float)% of Supply on ExchangesBitcoin (BTC)$1.7T$203B~12%Ethereum (ETH)$340B$41B~12%Solana (SOL)$71B$21B~30% The Market Cap MisconceptionMost people in crypto judge assets by market cap, but market cap is misleading because it includes all tokens, even those that never touch the market. What actually moves price is only the supply sitting on exchanges, because tho...]]></description>
            <content:encoded><![CDATA[<br><hr><h1 style="text-align: center" id="h-bitcoin-is-not-at-17tethereum-is-not-at-340bsolana-is-not-at-71b" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Bitcoin is not at 1.7T.<br>Ethereum is not at 340B.<br>Solana is not at 71B.</h1><table style="min-width: 100px"><colgroup><col><col><col><col></colgroup><tbody><tr><th colspan="1" rowspan="1"><p>Asset</p></th><th colspan="1" rowspan="1"><p>Market Cap (Displayed)</p></th><th colspan="1" rowspan="1"><p>Real Exchange Liquidity (Tradable Float)</p></th><th colspan="1" rowspan="1"><p>% of Supply on Exchanges</p></th></tr><tr><td colspan="1" rowspan="1"><p><strong>Bitcoin (BTC)</strong></p></td><td colspan="1" rowspan="1"><p><strong>$1.7T</strong></p></td><td colspan="1" rowspan="1"><p><strong>$203B</strong></p></td><td colspan="1" rowspan="1"><p><strong>~12%</strong></p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>Ethereum (ETH)</strong></p></td><td colspan="1" rowspan="1"><p><strong>$340B</strong></p></td><td colspan="1" rowspan="1"><p><strong>$41B</strong></p></td><td colspan="1" rowspan="1"><p><strong>~12%</strong></p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>Solana (SOL)</strong></p></td><td colspan="1" rowspan="1"><p><strong>$71B</strong></p></td><td colspan="1" rowspan="1"><p><strong>$21B</strong></p></td><td colspan="1" rowspan="1"><p><strong>~30%</strong></p></td></tr></tbody></table><br><h2 id="h-the-market-cap-misconception" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Market Cap Misconception</h2><p>Most people in crypto judge assets by market cap, but market cap is misleading because it includes all tokens, even those that never touch the market. What actually moves price is only the supply sitting on exchanges, because those are the coins that can be traded instantly. Everything else has zero short-term impact on price.</p><br><h3 id="h-real-bitcoin-liquidity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Real Bitcoin Liquidity</h3><p>Bitcoin has 19.7 million BTC in existence, but only around 2.37 million BTC are on exchanges. This is about 12 percent of total supply and equals roughly 203 billion dollars in real liquid value. Bitcoin does not trade on a 1.6 trillion dollar market cap. It trades on the 203 billion dollar float available on exchanges, which is why relatively small inflows or outflows can create strong moves.</p><br><h3 id="h-real-ethereum-liquidity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Real Ethereum Liquidity</h3><p>Ethereum has around 120 million ETH, but only about 14.5 million ETH are liquid on exchanges. This is again about 12 percent of supply and represents roughly 41 billion dollars in actual liquidity. The rest is staked, locked, or held long term. ETH does not move based on a 340 billion dollar market cap but on its 41 billion dollar tradable float.</p><br><h3 id="h-real-solana-liquidity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Real Solana Liquidity</h3><p>Solana has about 559 million SOL, yet only around 167 million SOL are liquid and tradable. This is roughly 30 percent of supply and equals around 21 billion dollars in real market liquidity. This limited float is why Solana moves so quickly compared to its displayed 71 billion dollar market cap.</p><br><p>Why Exchange Supply Is Everything</p><p>If tokens are staked, locked, stored in cold wallets, delegated or held long term, they do not affect price. Exchange supply is the true market, and market cap is only a surface number that does not influence short-term price discovery.</p><br><p>The Real Market Size</p><p>Based on actual liquidity, the real size of these assets is approximately 203 billion dollars for BTC, 41 billion for ETH and 21 billion for SOL. Understanding these smaller liquidity pools explains why crypto reacts violently to changes in demand and why its market structure behaves so differently from traditional assets.</p><br><p>Final Insight</p><p>Once you stop focusing on market cap and start tracking exchange liquidity, price movements become clearer, more predictable and far more logical. This is the real size of BTC, ETH and SOL according to CoinGlass exchange data.</p><br><hr><div data-type="shareButton" class="center-contents"><a class="email-subscribe-button" href="https://paragraph.com/@tadros/PBBMgiFjWgFiaJt0ZAE5">Share</a></div><br>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <category>#btc</category>
            <category>#sol</category>
            <category>eth</category>
            <category>marketcap</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/e462b72492f18926e2d237f076cf1ad47651f8d77e2ab59f00e55258d263cf71.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Crypto Meets Cause: $ETHIQ’s RESQ Agent Launches on Virtuals for Real-World Aid]]></title>
            <link>https://paragraph.com/@tadros/crypto-meets-cause-dollarethiqs-resq-agent-launches-on-virtuals-for-real-world-aid</link>
            <guid>h9voKb6deCkdnMuUpuEE</guid>
            <pubDate>Sat, 22 Nov 2025 04:22:48 GMT</pubDate>
            <description><![CDATA[The Breakthrough: RESQ Meets Humanitarian Aid Introducing ETHIQ ($ETHIQ) — launched via the VIRTUAL ecosystem on the Base chain and powered by the smart AI agent RESQ. This project fuses crypto-mechanics with genuine humanitarian action: donors route funds on-chain, beneficiaries receive immediate support, and token holders are rewarded for participation.MissionETHIQ stands for Ethical. Essential. Efficient. With blockchain transparency and AI-driven logic, it flips traditional aid models. Ra...]]></description>
            <content:encoded><![CDATA[<p>The Breakthrough:  RESQ Meets Humanitarian Aid</p><br><p>Introducing ETHIQ ($ETHIQ) — launched via the VIRTUAL ecosystem on the Base chain and powered by the smart AI agent RESQ. This project fuses crypto-mechanics with genuine humanitarian action: donors route funds on-chain, beneficiaries receive immediate support, and token holders are rewarded for participation.</p><hr><h3 id="h-mission" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Mission</h3><p>ETHIQ stands for Ethical. Essential. Efficient. With blockchain transparency and AI-driven logic, it flips traditional aid models. Rather than relying on opaque supply chains and slow donor-networks, ETHIQ enables direct, traceable, algorithm-matched donations to verified recipients.</p><hr><h3 id="h-how-it-works" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">How It Works</h3><p><strong>Agent Overview</strong><br>RESQ is the AI‐powered cornerstone: matching donors to beneficiaries worldwide based on real-time criteria—such as crisis type, location and urgency.<br><strong>Smart Matching</strong><br>RESQ filters and routes donations by:</p><ul><li><p>Geolocation</p></li><li><p>Crisis category (conflict, natural disaster, assistance)</p></li><li><p>Household-need profiles<br><strong>For Donors</strong></p></li><li><p>Choose your amount, pick your beneficiary or case, monitor the flow on-chain.</p></li><li><p>Filter by region, crisis type or urgency score.</p></li><li><p>Receive <strong>5%</strong> of your donation value back in ETHIQ tokens — aligning charitable action and token economics.<br><strong>For Beneficiaries</strong></p></li><li><p>Submit a short request form; RESQ matches you with a donor.</p></li><li><p>Access short-term work via the platform; get paid instantly, no deep crypto tech needed.<br>This creates a donor-recipient ecosystem that’s immediate, transparent and scalable.</p></li></ul><hr><h3 id="h-roadmap" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Roadmap</h3><p><strong>Phase 1: Foundation</strong></p><ul><li><p>Token launch on Base via Virtuals.</p></li><li><p>Release of RESQ agent + web app MVP.</p></li><li><p>Implementation of the “85/10/5” donation flow: 85% to aid, 10% ecosystem, 5% donor rewards.<br><strong>Phase 2: Partnerships &amp; Pilot</strong></p></li><li><p>Deploy real-world aid campaigns in the Middle East &amp; Africa.</p></li><li><p>Engage NGOs, UN agencies; establish the Donation Vault.<br><strong>Phase 3: Global Scaling</strong></p></li><li><p>Create the ETHIQ Aid Fund: a DAO-governed pool of resources for token-holders.</p></li><li><p>Expand ecosystem to include digital infrastructure: autonomous agents, compute/GPU support, machines in the humanitarian chain.</p></li><li><p>Transition into fully DAO-governed model: token-holders and stakers vote on fund allocation across relief, digital infrastructure and agent support.</p></li></ul><hr><h3 id="h-airdrop-and-campaign" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Airdrop &amp; Campaign</h3><p>The ETHIQ Quests are live on Galxe—designed for the crypto community and early-move participants.<br><span data-name="link" class="emoji" data-type="emoji">🔗</span> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://app.galxe.com/quest/atomiclo…">app.galxe.com/quest/atomiclo…</a></p><ul><li><p><strong>Phase 1</strong> → Earn the <em>Proof of Kindness OAT</em> by engaging early.</p></li><li><p><strong>Phase 2</strong> (tasks dropping soon) → Unlock the <em>Proof of Solidarity OAT</em> by:<br>• Backing rescue &amp; aid missions<br>• Making a genuine donation<br>• Buying ETHIQ so no one is left behind<br>This campaign blends crypto incentives with humanitarian action — ideal for investors aiming to align purpose with token mechanics.</p></li></ul><hr><h3 id="h-why-investors-care" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Why Investors Care</h3><ul><li><p>ETHIQ offers <strong>real utility</strong>: donation-reward mechanics + transparent on-chain impact = a token use-case.</p></li><li><p>The market gap is huge: millions underserved by financial infrastructure, especially in crisis zones.</p></li><li><p>On-chain traceability meets scale: your gas fee becomes an audited impact.</p></li><li><p>Built within the Virtuals ecosystem: hosts AI-agents, tokenised assets, co-ownership models — adding structural depth. <a target="_blank" rel="noopener" class="dont-break-out flex h-4.5 overflow-hidden rounded-xl px-2 text-[9px] font-medium transition-colors duration-150 ease-in-out text-token-text-secondary! bg-[#F4F4F4]! dark:bg-[#303030]!" href="https://virtuals.io/?utm_source=chatgpt.com">VIRTUAL+1</a></p></li><li><p>Airdrop + quest framework = strong viral, community-growth mechanics.</p></li></ul><hr><h3 id="h-get-involved" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Get Involved</h3><p>Explore the platform: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethiq.us￼Buy">https://ethiq.us<br>Buy</a> the token on launch-pad: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.virtuals.io/prototypes/0x9B1bBBa7C0BBaAF22315a939a19448559D605890￼Support">https://app.virtuals.io/prototypes/0x9B1bBBa7C0BBaAF22315a939a19448559D605890<br>Support</a> the mission, back the technology, and participate in transformation.</p><hr><div data-type="twitter" tweetid="1983983747277152580"> 
  <div class="twitter-embed embed">
    <div class="twitter-header">
        <div style="display:flex">
          <a target="_blank" href="https://twitter.com/ETHIQ_AId">
              <img alt="User Avatar" class="twitter-avatar" src="https://storage.googleapis.com/papyrus_images/319134f415e7ff00a08853802a1abc4a11d5d2ee334633f013ee97f11e403e93.jpg">
            </a>
            <div style="margin-left:4px;margin-right:auto;line-height:1.2;">
              <a target="_blank" href="https://twitter.com/ETHIQ_AId" class="twitter-displayname">ETHIQ</a>
              <p><a target="_blank" href="https://twitter.com/ETHIQ_AId" class="twitter-username">@ETHIQ_AId</a></p>
    
            </div>
            <a href="https://twitter.com/ETHIQ_AId/status/1983983747277152580" target="_blank">
              <img alt="Twitter Logo" class="twitter-logo" src="https://paragraph.com/editor/twitter/logo.png">
            </a>
          </div>
        </div>
      
    <div class="twitter-body">
      Unicorn launch page is now live on <a class="twitter-content-link" href="https://twitter.com/virtuals_io" target="_blank">@virtuals_io</a>.<br><br>Set your reminders, we go live in 2 days.<br><br>$ETHIQ 
      <div class="twitter-media">
      <img class="twitter-image" src="https://pbs.twimg.com/amplify_video_thumb/1983979228304392192/img/jYr4fuv6Djb0q7e7.jpg"> 
    </div>
      
       
    </div>
    
     <div class="twitter-footer">
          <a target="_blank" href="https://twitter.com/ETHIQ_AId/status/1983983747277152580" style="margin-right:16px; display:flex;">
            <img alt="Like Icon" class="twitter-heart" src="https://paragraph.com/editor/twitter/heart.png">
            56
          </a>
          <a target="_blank" href="https://twitter.com/ETHIQ_AId/status/1983983747277152580"><p>9:46 PM • Oct 30, 2025</p></a>
        </div>
    
  </div> 
  </div><br>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <category>$ethiq</category>
            <category>virtuals.io</category>
            <category>resq</category>
            <category>aiagent</category>
            <category>agenticai</category>
            <category>donations</category>
            <category>humanaid</category>
            <category>unchr</category>
            <category>undp</category>
            <enclosure url="https://storage.googleapis.com/papyrus_images/1cfd366388afa0bd1fa8b5fc2004c63d79a8e094c703d76b99bea28a86ceb5b8.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[From Hack to Recovery ]]></title>
            <link>https://paragraph.com/@tadros/from-hack-to-recovery</link>
            <guid>PmBEY6JUpf8k76QfJ5RE</guid>
            <pubDate>Sat, 07 Jun 2025 03:51:56 GMT</pubDate>
            <description><![CDATA[In a recent case, a client of mine was tricked by a fake MetaMask email into giving away their seed phrase. The attacker quickly gained full control over the user’s wallet. But within 30 minutes, I stepped in to reduce the damage. By moving funds, blocking gas access, and deploying a simple nodejs script, I managed to limit the loss. Here’s how it happened — and what you can learn from it. Full story by Simon Tadross – read more at simontadross.comHooked by a Fake MetaMask EmailMy client rece...]]></description>
            <content:encoded><![CDATA[<p>In a recent case, a client of mine was tricked by a fake MetaMask email into giving away their seed phrase. The attacker quickly gained full control over the user’s wallet. But within 30 minutes, I stepped in to reduce the damage. By moving funds, blocking gas access, and deploying a simple nodejs script, I managed to limit the loss. Here’s how it happened — and what you can learn from it.<br><br><em>Full story by Simon Tadross – read more at </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://simontadross.com"><em>simontadross.com</em></a></p><h3 id="h-hooked-by-a-fake-metamask-email" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Hooked by a Fake MetaMask Email</h3><p>My client received a fake MetaMask email saying their wallet was hacked and they needed to reset their password. It looked official — MetaMask logo, urgent tone — but it was a scam. MetaMask never sends emails asking for passwords or seed phrases. In a panic, they clicked and entered their 12 words on a phishing website.</p><p>That was all the attacker needed. They had full access.</p><h3 id="h-30-minutes-to-act-fast" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">30 Minutes to Act Fast</h3><p>Thirty minutes later, my client contacted me. The first step was to monitor the hacked wallet: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bscscan.com/address/0xf866e840c318212420e2287d21b65e940f0bb16e">0xf866...16e</a>. I saw assets were partly locked in Venus Protocol and some BNB was still available. I quickly transferred out all BNB to prevent the attacker from paying transaction fees.</p><p>Next, I launched a simple bot that checked the wallet balance and immediately sent any new BNB or tokens to a safe address. The script (shared here: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/spuriousdrag0n/counter-hacking-venus">GitHub – counter-hacking-venus</a>) monitored the hacked wallet and instantly moved any BNB or tokens to a safe address.</p><h3 id="h-how-venus-protocol-bought-us-time" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">How Venus Protocol Bought Us Time</h3><p>The attacker couldn’t access many of the funds because they were locked in <strong>Venus</strong>, a lending platform. In Venus, users supply tokens as collateral and borrow against them. But if your <strong>debt-to-collateral ratio gets too high</strong>, your assets become eligible for liquidation — which takes time.</p><p>This meant the attacker couldn’t just withdraw everything. They had to wait for liquidation or manually repay the debt, but they lacked the skill or tools to act quickly, especially with my bot intercepting any new balance. We didn’t need to rely on mempool tricks — their lack of expertise worked in our favor.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6ebdfd7225f485453b9f1650c89b6c8803ef967d6f76e76500fef6e93e905c16.jpg" alt="venus.io" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">venus.io</figcaption></figure><h3 id="h-outsmarting-the-attacker-with-code" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Outsmarting the Attacker with Code</h3><p>After blocking BNB withdrawals, I targeted tokens that would become available once repaid — like ADA, DOT, and MATIC. I paused the bot temporarily to trick the attacker into trying to withdraw. Once they did, I swept the tokens immediately.</p><p>The attacker was also using another wallet to fund gas fees: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bscscan.com/address/0xbC8E102f56D7F168b5749599b74122A57ed37969">0xbC8E...969</a>. I tracked and countered every move.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/19f79321b3ca49b0340514480472753a29f091880ec5a048dca81ec31b676f45.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><br><br>What We Learned (So You Don’t Have To)</p><ul><li><p><strong>Never share your seed phrase.</strong> Not even with MetaMask support — they will never ask.</p></li><li><p><strong>Double-check email links and domains.</strong> Don’t click urgent prompts without verifying the sender.</p></li><li><p><strong>Use bots and scripts.</strong> Automation gave us an edge and helped limit the attack.</p></li><li><p><strong>DeFi protocols can slow attackers.</strong> Venus’ rules prevented instant draining of collateral.</p></li></ul><h3 id="h-outcome-not-all-was-lost" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Outcome: Not All Was Lost</h3><p>The attacker got away with about <strong>40% of the assets</strong>, but 60% were saved thanks to fast action and smart automation. The experience shows that even in worst-case scenarios, you can fight back.</p><p>Want more security breakdowns and DeFi defense stories? Visit <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://simontadross.com">simontadros.com</a>.</p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/cc68cc728372bfe32678ef907fd286a4f4ccfa230aad5e99fe85442a2c8f9c17.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[The Harsh Reality of Cancer Treatments: A Personal Perspective]]></title>
            <link>https://paragraph.com/@tadros/the-harsh-reality-of-cancer-treatments-a-personal-perspective</link>
            <guid>1insgVFsx1H6IyPUrlg8</guid>
            <pubDate>Wed, 12 Mar 2025 03:59:22 GMT</pubDate>
            <description><![CDATA[Disclaimer: This is not medical advice. Always consult with a healthcare professional before making decisions about your health. ⸻ As someone who has witnessed two parents battling cancer, one with lung cancer and the other with lymphatic cancer, I can say with certainty that conventional cancer treatments—chemotherapy, immunotherapy, and radiation—are nothing short of torture. These so-called “treatments” do not cure cancer; they only poison the body while offering false hope. If I had the l...]]></description>
            <content:encoded><![CDATA[<p>Disclaimer: This is not medical advice. Always consult with a healthcare professional before making decisions about your health.</p><p>⸻</p><p>As someone who has witnessed two parents battling cancer, one with lung cancer and the other with lymphatic cancer, I can say with certainty that conventional cancer treatments—chemotherapy, immunotherapy, and radiation—are nothing short of torture. These so-called “treatments” do not cure cancer; they only poison the body while offering false hope. If I had the luxury of going back in time, I would never allow my parents to go through the brutal suffering caused by these toxic interventions.</p><p>The Hidden Truth About Chemotherapy and Radiation</p><p>Cancer patients are often led to believe that chemotherapy and radiation are their only options. Yet, the truth is rarely discussed:</p><p>• Chemotherapy destroys not just cancer cells, but also healthy ones, leading to immense suffering.</p><p>• Radiation weakens the immune system and damages surrounding organs. • Immunotherapy is experimental and unpredictable, with some treatments costing hundreds of thousands of dollars with no guaranteed success.</p><p>• Cancer recurrence is common—many patients find that after enduring these treatments, the cancer comes back even more aggressively.</p><p>Meanwhile, the pharmaceutical industry profits massively while patients endure a slow, painful decline.</p><p>If You Have Cancer, Avoid These Treatments</p><p>I deeply regret not exploring alternative approaches sooner. If you or a loved one has cancer, I strongly urge you to stay away from these poisonous treatments and instead consider alternative options that have been dismissed or suppressed by the mainstream medical industry.</p><p>Natural &amp; Affordable Alternatives</p><p>Here are some non-toxic, low-cost treatments that have shown promising results:</p><ol><li><p>Methylene Blue &amp; Lugol’s Iodine • Methylene Blue has shown mitochondria-boosting properties, which may help fight cancer. • Lugol’s Iodine is essential for thyroid function and cellular detoxification.</p></li><li><p>Ivermectin &amp; Fenbendazole • Both have been studied for anti-cancer properties and have anecdotal success stories. • Fenbendazole (a veterinary dewormer) has been linked to tumor shrinkage in some cases.</p></li><li><p>Turmeric &amp; Natural Diet Changes • Turmeric (curcumin) has been extensively studied for its anti-inflammatory and anti-cancer properties. • Eliminate all processed foods, sugar, bread, and soda—cancer thrives on sugar. • Detox your environment—avoid plastics, chemicals, and radiation exposure.</p></li><li><p>CRISPR: A Revolutionary Cancer Solution?</p></li></ol><p>One of the most promising future technologies for fighting cancer is CRISPR gene editing. Unlike chemotherapy and radiation, CRISPR directly targets and corrects genetic mutations at the DNA level, which could potentially reverse cancer instead of just slowing it down. While still in early stages, this technology offers real hope for a true cure.</p><p>A Censored Truth: Why ChatGPT Won’t Tell You This</p><p>If you ask ChatGPT or any AI aligned with mainstream narratives, it will tell you that these treatments are ineffective and that only Big Pharma’s solutions are valid. This is because AI systems are censored to align with the pharmaceutical industry’s interests.</p><p>Final Thoughts</p><p>If you or a loved one is facing cancer, do your own research before blindly trusting the medical system. Time and health are too precious to waste on poisonous treatments that only serve to enrich the pharmaceutical giants.</p><p>What I regret most is not questioning the system sooner. If I had, my parents might have had a fighting chance. You do. Take it.</p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/ed3f340b0b3c29a8b06b03c37c252215229ef3a3b59f6b932c729097387c52fb.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Step-by-Step Tutorial for Setting Up Rust and Managing SPL Tokens on Solana]]></title>
            <link>https://paragraph.com/@tadros/step-by-step-tutorial-for-setting-up-rust-and-managing-spl-tokens-on-solana</link>
            <guid>TfH1lbORNwWikac4ZeUs</guid>
            <pubDate>Mon, 20 May 2024 15:07:17 GMT</pubDate>
            <description><![CDATA[Step-by-Step Tutorial for Setting Up Rust and Managing SPL Tokens on Solana1. Install Rustcurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 2. Install SPL Token CLIcargo install spl-token-cli 3. Set Rust Compiler Versionrustup override set 1.77.2 4. Reinstall SPL Token CLI (if necessary)cargo install spl-token-cli 5. Install Solanash -c "$(curl -sSfL https://release.solana.com/v1.18.4/install)" 6. Update Path Environment Variableexport PATH="/Users/spuriousdragon/.local/share/sol...]]></description>
            <content:encoded><![CDATA[<h3 id="h-step-by-step-tutorial-for-setting-up-rust-and-managing-spl-tokens-on-solana" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Step-by-Step Tutorial for Setting Up Rust and Managing SPL Tokens on Solana</h3><h4 id="h-1-install-rust" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">1. Install Rust</h4><pre data-type="codeBlock" text="curl --proto &apos;=https&apos; --tlsv1.2 -sSf https://sh.rustup.rs | sh
"><code>curl <span class="hljs-operator">-</span><span class="hljs-operator">-</span>proto <span class="hljs-string">'=https'</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>tlsv1<span class="hljs-number">.2</span> <span class="hljs-operator">-</span>sSf https:<span class="hljs-comment">//sh.rustup.rs | sh</span>
</code></pre><h4 id="h-2-install-spl-token-cli" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">2. Install SPL Token CLI</h4><pre data-type="codeBlock" text="cargo install spl-token-cli
"><code>cargo install spl<span class="hljs-operator">-</span>token<span class="hljs-operator">-</span>cli
</code></pre><h4 id="h-3-set-rust-compiler-version" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">3. Set Rust Compiler Version</h4><pre data-type="codeBlock" text="rustup override set 1.77.2
"><code>rustup <span class="hljs-keyword">override</span> set <span class="hljs-number">1.77</span><span class="hljs-number">.2</span>
</code></pre><h4 id="h-4-reinstall-spl-token-cli-if-necessary" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">4. Reinstall SPL Token CLI (if necessary)</h4><pre data-type="codeBlock" text="cargo install spl-token-cli
"><code>cargo install spl<span class="hljs-operator">-</span>token<span class="hljs-operator">-</span>cli
</code></pre><h4 id="h-5-install-solana" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">5. Install Solana</h4><pre data-type="codeBlock" text="sh -c &quot;$(curl -sSfL https://release.solana.com/v1.18.4/install)&quot;
"><code>sh -c <span class="hljs-string">"<span class="hljs-subst">$(curl -sSfL https://release.solana.com/v1.18.4/install)</span>"</span>
</code></pre><h4 id="h-6-update-path-environment-variable" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">6. Update Path Environment Variable</h4><pre data-type="codeBlock" text="export PATH=&quot;/Users/spuriousdragon/.local/share/solana/install/active_release/bin:$PATH&quot;
"><code><span class="hljs-built_in">export</span> PATH=<span class="hljs-string">"/Users/spuriousdragon/.local/share/solana/install/active_release/bin:<span class="hljs-variable">$PATH</span>"</span>
</code></pre><h4 id="h-7-create-a-new-solana-wallet" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">7. Create a New Solana Wallet</h4><p>Follow the guide to create a new wallet using your seed phrase or a hardware wallet: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.solanalabs.com/cli/intro#keypair-conventions">Guide to Solana Keypair Conventions</a></p><p>Command to create a new wallet:</p><pre data-type="codeBlock" text="solana-keygen new
"><code>solana<span class="hljs-operator">-</span>keygen <span class="hljs-keyword">new</span>
</code></pre><h4 id="h-8-fund-your-wallet" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">8. Fund Your Wallet</h4><p>Send some SOL (not ETH, as Solana uses SOL for transactions) to your wallet&apos;s address.</p><h4 id="h-9-create-a-new-spl-token" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">9. Create a New SPL Token</h4><pre data-type="codeBlock" text="spl-token create-token
"><code>spl<span class="hljs-operator">-</span>token create<span class="hljs-operator">-</span>token
</code></pre><p>Save the generated token address.</p><h4 id="h-10-check-token-supply" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">10. Check Token Supply</h4><pre data-type="codeBlock" text="spl-token supply &lt;token_address&gt;
"><code>spl<span class="hljs-operator">-</span>token supply <span class="hljs-operator">&#x3C;</span>token_address<span class="hljs-operator">></span>
</code></pre><p>This should return <code>0</code> initially.</p><h4 id="h-11-create-a-token-account" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">11. Create a Token Account</h4><pre data-type="codeBlock" text="spl-token create-account &lt;token_address&gt;
"><code>spl<span class="hljs-operator">-</span>token create<span class="hljs-operator">-</span>account <span class="hljs-operator">&#x3C;</span>token_address<span class="hljs-operator">></span>
</code></pre><p>Save the new account address.</p><h4 id="h-12-mint-tokens" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">12. Mint Tokens</h4><pre data-type="codeBlock" text="spl-token mint &lt;token_address&gt; &lt;number_of_tokens&gt; &lt;account_address&gt;
"><code>spl<span class="hljs-operator">-</span>token mint <span class="hljs-operator">&#x3C;</span>token_address<span class="hljs-operator">></span> <span class="hljs-operator">&#x3C;</span>number_of_tokens<span class="hljs-operator">></span> <span class="hljs-operator">&#x3C;</span>account_address<span class="hljs-operator">></span>
</code></pre><p>Gas fees are required for this operation.</p><h4 id="h-13-check-token-balance" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">13. Check Token Balance</h4><pre data-type="codeBlock" text="spl-token balance &lt;token_address&gt;
"><code>spl<span class="hljs-operator">-</span>token balance <span class="hljs-operator">&#x3C;</span>token_address<span class="hljs-operator">></span>
</code></pre><h4 id="h-14-disable-further-minting" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">14. Disable Further Minting</h4><pre data-type="codeBlock" text="spl-token authorize &lt;token_address&gt; mint --disable
"><code>spl<span class="hljs-operator">-</span>token authorize <span class="hljs-operator">&#x3C;</span>token_address<span class="hljs-operator">></span> mint <span class="hljs-operator">-</span><span class="hljs-operator">-</span>disable
</code></pre><p>Verify if further minting is disabled to ensure it worked correctly.</p><h4 id="h-15-burn-tokens" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">15. Burn Tokens</h4><pre data-type="codeBlock" text="spl-token burn &lt;token_address&gt; &lt;number_of_tokens&gt;
"><code>spl<span class="hljs-operator">-</span>token burn <span class="hljs-operator">&#x3C;</span>token_address<span class="hljs-operator">></span> <span class="hljs-operator">&#x3C;</span>number_of_tokens<span class="hljs-operator">></span>
</code></pre><h4 id="h-16-view-token-account-info" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">16. View Token Account Info</h4><pre data-type="codeBlock" text="spl-token account-info &lt;token_address&gt;
"><code>spl<span class="hljs-operator">-</span>token account<span class="hljs-operator">-</span>info <span class="hljs-operator">&#x3C;</span>token_address<span class="hljs-operator">></span>
</code></pre><h4 id="h-17-transfer-tokens" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">17. Transfer Tokens</h4><pre data-type="codeBlock" text="spl-token transfer --fund-recipient &lt;contract_address&gt; &lt;amount&gt; &lt;recipient_address&gt;
"><code>spl<span class="hljs-operator">-</span>token transfer <span class="hljs-operator">-</span><span class="hljs-operator">-</span>fund<span class="hljs-operator">-</span>recipient <span class="hljs-operator">&#x3C;</span>contract_address<span class="hljs-operator">></span> <span class="hljs-operator">&#x3C;</span>amount<span class="hljs-operator">></span> <span class="hljs-operator">&#x3C;</span>recipient_address<span class="hljs-operator">></span>
</code></pre><h4 id="h-18-install-metaboss-for-metadata-management" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">18. Install Metaboss for Metadata Management</h4><pre data-type="codeBlock" text="cargo install metaboss
"><code></code></pre><h4 id="h-19-prepare-metadata-json-file" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">19. Prepare Metadata JSON File</h4><p>Create a <code>metadata.json</code> file with the following content:</p><pre data-type="codeBlock" text="{
  &quot;name&quot;: &quot;TokenName&quot;,
  &quot;symbol&quot;: &quot;TKN&quot;,
  &quot;description&quot;: &quot;Description of the token.&quot;,
  &quot;image&quot;: &quot;https://example.com/path/to/image.png&quot;,
  &quot;extensions&quot;: {
    &quot;website&quot;: &quot;https://example.com&quot;,
    &quot;twitter&quot;: &quot;https://twitter.com/example&quot;
  }
}
"><code><span class="hljs-punctuation">{</span>
  <span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"TokenName"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"symbol"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"TKN"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"description"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Description of the token."</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"image"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://example.com/path/to/image.png"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"extensions"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
    <span class="hljs-attr">"website"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://example.com"</span><span class="hljs-punctuation">,</span>
    <span class="hljs-attr">"twitter"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"https://twitter.com/example"</span>
  <span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">}</span>
</code></pre><p>Replace the placeholders with appropriate values.</p><h4 id="h-20-host-metadata-json-file" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">20. Host Metadata JSON File</h4><p>Upload the <code>metadata.json</code> file to a Content Delivery Network (CDN) or a web server where it can be publicly accessed. Ensure the URL to the JSON file is correct and accessible.</p><p>For example, if you upload it to a CDN, the URL might look something like this:</p><pre data-type="codeBlock" text="https://example-cdn.com/path/to/metadata.json
"><code><span class="hljs-symbol">https:</span>/<span class="hljs-regexp">/example-cdn.com/path</span><span class="hljs-regexp">/to/metadata</span>.json
</code></pre><p>Use this URL in the <code>uri</code> field of your metadata JSON file.</p><h4 id="h-21-create-metadata-using-metaboss" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">21. Create Metadata Using Metaboss</h4><pre data-type="codeBlock" text="metaboss create metadata -a &lt;token_address&gt; -m https://example-cdn.com/path/to/metadata.json --rpc https://api.mainnet-beta.solana.com
"><code>metaboss create metadata <span class="hljs-operator">-</span>a <span class="hljs-operator">&#x3C;</span>token_address<span class="hljs-operator">></span> <span class="hljs-operator">-</span>m https:<span class="hljs-comment">//example-cdn.com/path/to/metadata.json --rpc https://api.mainnet-beta.solana.com</span>
</code></pre><h4 id="h-22-change-ownership-of-spl-token" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">22. Change Ownership of SPL Token</h4><p>If you want to change the ownership of the contract or SPL token, use the following command:</p><pre data-type="codeBlock" text="spl-token authorize &lt;token_address&gt; mint --new-owner &lt;new_owner_public_key&gt;
"><code>spl<span class="hljs-operator">-</span>token authorize <span class="hljs-operator">&#x3C;</span>token_address<span class="hljs-operator">></span> mint <span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-keyword">new</span><span class="hljs-operator">-</span>owner <span class="hljs-operator">&#x3C;</span>new_owner_public_key<span class="hljs-operator">></span>
</code></pre><p>These steps should guide you through creating and managing an SPL token on Solana, including adding metadata to your token and changing its ownership.</p><hr><p>If you found this tutorial helpful and would like to support my work, consider donating to:</p><p><strong>Solana Address: FdDRBkAcbQdH56MXyPD495R73TbzCoeRYZusVnHaGk36</strong></p><p>Thank you!</p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/fcec540d62665705f9a6386f3d5591934877367c50c6a206556aad72cf793708.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Rising from the Abyss: The Epic Triumph of Justice -day 777 ]]></title>
            <link>https://paragraph.com/@tadros/rising-from-the-abyss-the-epic-triumph-of-justice-day-777</link>
            <guid>uav6LXQWjuVLPB74Wz2g</guid>
            <pubDate>Sat, 14 Oct 2023 01:58:23 GMT</pubDate>
            <description><![CDATA[In the shadow of the law, a tale unfolded - a saga of loss, resilience, and the relentless pursuit of justice. In following the article , I detailed the harrowing journey through the Belgian legal system, a journey that saw me imprisoned without evidence, my family shattered, and my assets dwindling. https://mirror.xyz/tadros.eth/jI_s3qkf0KZbM1gofHWqG60T9JNEEiD3Bdt_HrIKLKwThe words of Charles de Montesquieu resonated throughout this ordeal: "There&apos;s no greater tyranny than one perpetrate...]]></description>
            <content:encoded><![CDATA[<p>In the shadow of the law, a tale unfolded - a saga of loss, resilience, and the relentless pursuit of justice. In following the article , I detailed the harrowing journey through the Belgian legal system, a journey that saw me imprisoned without evidence, my family shattered, and my assets dwindling.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/tadros.eth/jI_s3qkf0KZbM1gofHWqG60T9JNEEiD3Bdt_HrIKLKw">https://mirror.xyz/tadros.eth/jI_s3qkf0KZbM1gofHWqG60T9JNEEiD3Bdt_HrIKLKw</a></p><blockquote><p>The words of Charles de Montesquieu resonated throughout this ordeal: &quot;<strong>There&apos;s no greater tyranny than one perpetrated under the shield of the law and in the name of justice.&quot;</strong> My belief in the Belgian constitution and law wavered as I faced the loss of my father, my mother&apos;s health crisis, and the collapse of a company with over 30 employees.</p></blockquote><p>Released on bail but forbidden to work for 1.6 years, the journey through the Belgian justice system tested my resilience. Arrested in Ukraine, I clung to my innocence and my expertise in computer science and blockchain. Despite moments of lost faith, the judge of Veurne, in a moment of impartial wisdom, declared my acquittal, dispelling the biases and mistakes that marred the process.</p><p>It became evident that the prosecutor, swayed by emotion and stubbornness, had led the case astray. Advocating for education and science as solutions, I reminded him that emotions often cloud human judgment.</p><p>Now, as a phoenix returns to Byblos, the land of rebirth, I am poised to launch a new venture in crypto development. My journey through the fire has fortified my resolve to preach the importance of Bitcoin and monetary freedom.</p><p>In the end, justice prevailed, dispelling the darkness that clouded my path for 777 days. Let there be light, and perhaps, a touch of dark humor as we reflect on the absurdity of the journey. As the saying goes, &quot;Nothing in the dark that will not be brought to light.&quot;</p><p>In the recent article, the Belgian press took a swipe at the prosecutor, blaming them for wasting time and money. However, lost in their criticism is the fact that I&apos;m the one facing the bigger loss—a loss that can&apos;t be compensated in any way. Ironically, they&apos;ve portrayed me as some kind of war god, Kratos, when, in reality, my role in the crypto world has been all about peace.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://m.nieuwsblad.be/cnt/dmf20230919_93897371?fbclid=IwAR0SeKtHNrOt_K3X_91tiukaAW1CArOIZa6RUa1Bk20rtcXskM4QIxvWfIw">https://m.nieuwsblad.be/cnt/dmf20230919_93897371?fbclid=IwAR0SeKtHNrOt_K3X_91tiukaAW1CArOIZa6RUa1Bk20rtcXskM4QIxvWfIw</a></p><p>I&apos;ve spent my time fighting against crime and scams, dedicating my life to making the crypto ecosystem safer. Despite my initial trust in Belgian law, I&apos;ve learned the hard way to hold onto my beliefs.</p><p>I want to express my gratitude to the Atomic Swap community and all my friends who supported me during this crisis. In the end, justice prevailed.</p><p>Until now, Simon Tadros remains the first true crypto adopter in Lebanon, a pioneer who led the movement when no one else dared. His case remains unresolved, a testament to the challenges faced by those who stand at the forefront of financial freedom. While many have tried to claim the throne, there is no true king of crypto in Lebanon like Simon Tadros—his impact, knowledge, and resilience remain unmatched.</p><p>Simon #usa #bitcoin lebanon</p><div data-type="youtube" videoId="ZTo8qVcOH5k">
      <div class="youtube-player" data-id="ZTo8qVcOH5k" style="background-image: url('https://i.ytimg.com/vi/ZTo8qVcOH5k/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=ZTo8qVcOH5k">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/live/okx9ZRoXKrY?si=24cQNGtAl_J5CtzP">https://www.youtube.com/live/okx9ZRoXKrY?si=24cQNGtAl_J5CtzP</a></p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/e48367c954fc24cea9f22a215ffbcabf9397ffdedfa5b297b20e370c16d3cec1.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Friend.tech bot ]]></title>
            <link>https://paragraph.com/@tadros/friend-tech-bot</link>
            <guid>IPDBxf914PkU7xGty4l3</guid>
            <pubDate>Sun, 17 Sep 2023 23:22:32 GMT</pubDate>
            <description><![CDATA[🚀 Announcement: Bot Upgrade and Investment Opportunity 🚀 Dear community, Exciting news! 🎉 We now have three enthusiastic investors with a combined investment of approximately 1 ETH! 🌟 Our upgraded bot on Friend Tech is ready to soar to new heights. 🚀 How to Participate: To join our stellar investment group and ride the crypto wave, simply send ETH to the following address: 0xc46D0b652e02FB286B61ee9bBB039F952f2F43d0. 🌊 Investment Details:Initial investment in the bot: 0.35 ETHGains are d...]]></description>
            <content:encoded><![CDATA[<p>🚀 <strong>Announcement: Bot Upgrade and Investment Opportunity</strong> 🚀</p><p>Dear community,</p><p>Exciting news! 🎉 We now have three enthusiastic investors with a combined investment of approximately 1 ETH! 🌟 Our upgraded bot on Friend Tech is ready to soar to new heights. 🚀</p><p><strong>How to Participate:</strong> To join our stellar investment group and ride the crypto wave, simply send ETH to the following address: <code>0xc46D0b652e02FB286B61ee9bBB039F952f2F43d0</code>. 🌊</p><p><strong>Investment Details:</strong></p><ul><li><p>Initial investment in the bot: 0.35 ETH</p></li><li><p>Gains are distributed equally among participants. 💰💰</p></li></ul><p><strong>Transaction Receipt:</strong> After you&apos;ve sent your investment, please provide a receipt for the transaction. We&apos;ll add it to our shared Google Doc for transparency and tracking. 📊🔍 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/spreadsheets/d/1tN-AKaYL1NGyvCOO2R178QyPZT9Hty4lvBZGzeS036o/edit?usp=sharing">Shared Google Doc</a></p><p><strong>Investor Sheet:</strong> Want to see who&apos;s on board with us? Check out our investor sheet on Google Docs. 📈👥 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/spreadsheets/d/1tN-AKaYL1NGyvCOO2R178QyPZT9Hty4lvBZGzeS036o/edit?usp=sharing">Investor Sheet</a></p><p><strong>Track Our Trades:</strong> Want to see how our bot is performing? Check out our trade tracker on Dune Analytics. 📈💹 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dune.com/thecool/friend-tech-trade-tracker?Wallet+Address_t624e0=++0xc46D0b652e02FB286B61ee9bBB039F952f2F43d0">Trade Tracker</a></p><p><strong>Bot Address:</strong> Here&apos;s our bot&apos;s address for your reference: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://basescan.org/address/0xc46D0b652e02FB286B61ee9bBB039F952f2F43d0">Bot Address</a></p><p><strong>Current Status:</strong></p><ul><li><p>Total Investors: 3 🚀</p></li><li><p>Total Investment: Approximately 1 ETH 🌟</p></li></ul><p>Don&apos;t miss out on this opportunity to invest and grow with us. Thank you for your continued support! 🙏</p><p>Best regards, 🌟</p>]]></content:encoded>
            <enclosure url="https://storage.googleapis.com/papyrus_images/8ed0f7b2b60f15ba4bb7cff5ab81617a38e8ac3f643136e91611c553e9305107.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Shardeum validator 1.4.0 fix]]></title>
            <link>https://paragraph.com/@tadros/shardeum-validator-1-4-0-fix</link>
            <guid>Cv6tnKAwjL203uQQKR9I</guid>
            <pubDate>Sun, 18 Jun 2023 20:25:50 GMT</pubDate>
            <description><![CDATA[https://shardeum.org/ As per the new version of validators, the node is exiting every time it starts and finishes validating. To address this issue, I have created a small bash script that can help fix the problem.Quick fix :Navigate to the Shardeum directory and access docker instance using the following command:cd .shardeum/ ./shell.sh Install nano and create a new file “status_check.sh”:apt install nano nano status_check.sh Paste the following code :#!/bin/bash # Function to check the stat...]]></description>
            <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://shardeum.org/">https://shardeum.org/</a></p><p>As per the new version of validators, the node is exiting every time it starts and finishes validating. To address this issue, I have created a small bash script that can help fix the problem.</p><h3 id="h-quick-fix" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Quick fix :</h3><ul><li><p>Navigate to the Shardeum directory and access docker instance using the following command:</p><pre data-type="codeBlock" text="cd .shardeum/
./shell.sh
"><code>cd .shardeum/
./shell.sh
</code></pre></li><li><p>Install nano and create a new file “status_check.sh”:</p><pre data-type="codeBlock" text="apt install nano
nano status_check.sh
"><code>apt install nano
nano status_check.sh
</code></pre></li><li><p>Paste the following code :</p><pre data-type="codeBlock" text="#!/bin/bash

# Function to check the status
check_status() {
    # Fetch the status using the operator-cli command or any appropriate method
    status=$(operator-cli status | grep &quot;state:&quot; | awk &apos;{print $2}&apos;)

    # Compare the status to &quot;active&quot;
       if [[ &quot;$status&quot; == &quot;standby&quot; || &quot;$status&quot; == &quot;active&quot; ]]; then
       echo &quot;Status is standby or active.&quot;
    else
        echo &quot;Status is neither standby nor active. Running the command...&quot;
        # Run the command you want to execute when the status is not active
        # Replace the following line with your desired command
        operator-cli start
    fi
}

# Loop to check the status every 5 minutes
while true; do
    check_status
    sleep 300  # Sleep for 5 minutes (300 seconds)
done
"><code><span class="hljs-meta">#!/bin/bash</span>

<span class="hljs-comment"># Function to check the status</span>
<span class="hljs-function"><span class="hljs-title">check_status</span></span>() {
    <span class="hljs-comment"># Fetch the status using the operator-cli command or any appropriate method</span>
    status=$(operator-cli status | grep <span class="hljs-string">"state:"</span> | awk <span class="hljs-string">'{print $2}'</span>)

    <span class="hljs-comment"># Compare the status to "active"</span>
       <span class="hljs-keyword">if</span> [[ <span class="hljs-string">"<span class="hljs-variable">$status</span>"</span> == <span class="hljs-string">"standby"</span> || <span class="hljs-string">"<span class="hljs-variable">$status</span>"</span> == <span class="hljs-string">"active"</span> ]]; <span class="hljs-keyword">then</span>
       <span class="hljs-built_in">echo</span> <span class="hljs-string">"Status is standby or active."</span>
    <span class="hljs-keyword">else</span>
        <span class="hljs-built_in">echo</span> <span class="hljs-string">"Status is neither standby nor active. Running the command..."</span>
        <span class="hljs-comment"># Run the command you want to execute when the status is not active</span>
        <span class="hljs-comment"># Replace the following line with your desired command</span>
        operator-cli start
    <span class="hljs-keyword">fi</span>
}

<span class="hljs-comment"># Loop to check the status every 5 minutes</span>
<span class="hljs-keyword">while</span> <span class="hljs-literal">true</span>; <span class="hljs-keyword">do</span>
    check_status
    <span class="hljs-built_in">sleep</span> 300  <span class="hljs-comment"># Sleep for 5 minutes (300 seconds)</span>
<span class="hljs-keyword">done</span>
</code></pre></li><li><p>Save and exit</p></li><li><p>Run the following command to text than exit</p><pre data-type="codeBlock" text="chmod +x status_checker.sh
"><code>chmod <span class="hljs-operator">+</span>x status_checker.sh
</code></pre><p><strong>Make the script run indefinitely :</strong></p></li></ul><ol><li><p>Install <code>tmux</code> apt-get install tmux</p></li><li><p>Run the script:</p><pre data-type="codeBlock" text="./status_checker.sh
"><code>./status_checker.sh
</code></pre></li><li><p>Detach from the <code>tmux</code> session: Press <code>Ctrl + B</code>, then release the keys and press <code>D</code>.</p></li></ol><p>Finally, this script runs every 5 minutes to check if the node is stopped and reactivates it. Additionally, please note that Shardeum will be airdropping soon, as mentioned in this tweet: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/yashjhade/status/1610574415485603841">link to the tweet</a>.</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"></h3>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/da2ebd28a46ed2360a227cf97e95205bce3aee21162e1e9a9b2e60384dfb46cf.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA["Simon Tadros": A Lebanese Tech Entrepreneur's Harrowing Journey Through Belgian Justice: The Untold Story of Injustice, Loss, and Survival.]]></title>
            <link>https://paragraph.com/@tadros/simon-tadros-a-lebanese-tech-entrepreneur-s-harrowing-journey-through-belgian-justice-the-untold-story-of-injustice-loss-and-survival</link>
            <guid>cezGUG5nlGVGxFIH350W</guid>
            <pubDate>Mon, 05 Jun 2023 03:21:35 GMT</pubDate>
            <description><![CDATA[There is no crueler tyranny than that which is perpetuated under the shield of law and in the name of justice." ~ Baron de Montesquieu NIHDay 764 …ArabnetMy name is Simon Tadros, a Lebanese serial crypto entrepreneur and layer 2 engineer, and I have endured numerous injustices and unfair treatment on Belgian soil. In this blog post, I aim to shed light on the profound challenges I have faced and the inhuman conditions imposed upon me. From my unjust detention to the deprivation of my basic hu...]]></description>
            <content:encoded><![CDATA[<blockquote><p>There is no crueler tyranny than that which is perpetuated under the shield of law and in the name of justice.&quot; ~ Baron de Montesquieu NIH</p></blockquote><h2 id="h-day-764" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Day 764 …</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b3fd57316e8512fc0859a91aff1921ecbaf25846243b310b0c3e85fa074f94e1.jpg" alt="Arabnet" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Arabnet</figcaption></figure><h3 id="h-my-name-is-simon-tadros-a-lebanese-serial-crypto-entrepreneur-and-layer-2-engineer-and-i-have-endured-numerous-injustices-and-unfair-treatment-on-belgian-soil-in-this-blog-post-i-aim-to-shed-light-on-the-profound-challenges-i-have-faced-and-the-inhuman-conditions-imposed-upon-me-from-my-unjust-detention-to-the-deprivation-of-my-basic-human-rights-i-will-share-the-devastating-impact-this-has-had-on-my-life-and-the-urgent-need-for-justice-and-compassion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">My name is Simon Tadros, a Lebanese serial crypto entrepreneur and layer 2 engineer, and I have endured numerous injustices and unfair treatment on Belgian soil. In this blog post, I aim to shed light on the profound challenges I have faced and the inhuman conditions imposed upon me. From my unjust detention to the deprivation of my basic human rights, I will share the devastating impact this has had on my life and the urgent need for justice and compassion.</h3><ul><li><p><code>Unjust Detention and Lack of Evidence:</code></p><p>Despite the absence of any concrete evidence against me, I was held for an excruciating six months in Brugge following my deportation from Ukraine on August 12th, 2021. The authorities failed to provide any evidence to support the accusations, leaving me trapped in a legal limbo without justification.</p></li><li><p><code>Release Conditions and Unprecedented Restrictions:</code></p><p>Upon my release, I was subjected to extreme and inhuman release conditions. These conditions included a prohibition from speaking to the media, the confiscation of my passport, and the restriction from working on Belgian soil. Furthermore, I was forced to pay a bail of 120,000 euros, which I gathered with the help of my family, friends, and crypto community in Lebanon. These restrictive conditions have left me jobless and unable to support myself and my loved ones.</p><p>I was falsely accused by the court of paying the guarantee from my own funds. However, I have concrete evidence in the form of a video documenting the donation campaign that was launched to support me. This video clearly shows the solidarity and generosity of my family, friends, and the crypto community in Lebanon who came together to help raise the funds necessary to secure my release. Despite the court&apos;s unfounded accusations, this video stands as a testament to the truth, revealing the collective effort and support I received during my time of need. It is disheartening that the court failed to recognize the legitimacy of these donations and instead attributed them to personal funds.</p><p><strong>Those videos are publicly available :</strong></p></li></ul><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://youtube.com/@spuriousdragon9710">https://youtube.com/@spuriousdragon9710</a></p><ul><li><p><code>Desperate Living Situation and Lack of Medical Care:</code></p><p>After two years, I remain homeless, with none of my belongings returned to me. I am reliant on the goodwill of a Belgian-Lebanese compatriot who has provided me with temporary shelter, but their support can no longer be sustained. Additionally, I lack identification papers and medical records, depriving me of the necessary medical care for deteriorating health conditions such as dental issues and Type 1 diabetes.</p><p>It is important to highlight that my diagnosis of Type 1 diabetes is a direct result of the immense stress and trauma I experienced during my arrest and subsequent unjust detention. The distressing circumstances I endured not only infringed upon my basic human rights but also had severe consequences for my physical well-being.</p><p>The lack of proper medical care and access to necessary medications has further exacerbated my condition. The deteriorating state of my health, including dental problems and the need for constant medication, demands urgent attention. However, without any official existence in the Belgian system, I have been denied the essential medical records, insurance, and support that should be available to every individual.</p></li><li><p><code>Untrusted and Scam Company Energi&apos;s Role:</code></p><p>It has come to light that all the accusations and hardships I have faced were based on an article published by the untrusted and scam company known as Energi. This revelation calls into question the credibility of the allegations and the actions taken against me. The article was written by Eypersson Peter, who is affiliated with the Energi Bureau of Investigations (EBI). It appears that this article was crafted to divert attention from the suspicious activities surrounding Energi.</p></li></ul><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://medium.com/energi/chasing-down-discords-biggest-crypto-scammer-cb7b82c40924/">https://medium.com/energi/chasing-down-discords-biggest-crypto-scammer-cb7b82c40924/</a></p><ul><li><p><code>Andre Galkin&apos;s Testimony and Involvement:</code></p></li></ul><p>During the court proceedings, the main developer of the Energi cryptocurrency coin, Andre Galkin, provided a compelling testimony that discredited Peter&apos;s claims. Galkin explicitly stated that Peter&apos;s accusation of him being crazy was unfounded and that he had been expelled from the company due to his own erratic behavior. In fact, Galkin submitted a comprehensive 60-page document to the court, meticulously refuting Peter&apos;s testimony and implicating Energi in potential scams.</p><p>This revelation raises serious doubts about the reliability of Peter&apos;s article and the motivations behind its publication. It appears that Energi sought to divert attention from their suspicious activities by concocting baseless allegations against me. The fact that Andre Galkin, a central figure in Energi, vehemently denied Peter&apos;s claims and provided evidence incriminating Energi further reinforces the lack of credibility and integrity associated with Peter&apos;s assertions.</p><p>In light of these revelations, it is imperative that the court and the public critically examine the evidence provided by Andre Galkin and reassess the veracity of Peter&apos;s testimony. It is unjustifiable to base accusations and impose severe consequences on individuals based on unreliable and potentially malicious sources.</p><p>I call upon the Belgian authorities to thoroughly investigate the role of Energi, the Energi Bureau of Investigations (EBI), and Eyperson Peter, ensuring transparency and fairness in the pursuit of justice. It is only through an impartial and unbiased examination of the facts that the truth can be revealed and the profound injustice I have endured can be rectified.</p><p>By sharing these details, I aim to expose the dubious nature of the allegations against me and shed light on the manipulation and deceit that have clouded my case. The truth deserves to be heard, and I implore all concerned parties to approach this matter with the utmost scrutiny and commitment to justice.</p><ul><li><p><code>Injustice and Appeals to Human Rights Organizations:</code></p><p>In my quest for justice, I reached out to various human rights organizations, seeking support and intervention in my case. Unfortunately, I was met with disheartening responses stating that they do not handle individual cases. This revelation left me feeling abandoned and helpless, as I believed that these organizations would champion the cause of justice and defend the rights of individuals facing unjust treatment. It is deeply troubling that despite the glaring injustices I have experienced, the avenues for seeking assistance and recourse appear to be limited. I find myself caught in a web of unjust accusations, enduring the consequences of a crime I did not commit. The very essence of justice is being compromised as I continue to suffer the repercussions of being separated from my family, including my young daughter, who has been denied the presence of her father for two long years.</p><p>Additionally, I find it profoundly unfair that I have been prohibited from engaging in any form of work or employment during this time. This prohibition has deprived me of the means to sustain myself and support my loved ones. The financial burden has become overwhelming, making it increasingly difficult to fulfill even the most basic needs for my family.</p><p>Furthermore, it is worth noting that I have already paid the price for the stolen Dash cryptocurrency, despite being innocent of any wrongdoing. It is a grave miscarriage of justice that I have served time in prison without having faced a fair trial or received a sentence. The question remains: What more do they want from me? How much longer must I endure the consequences of a crime I did not commit?</p><p>I implore the Belgian justice system to review my case with the utmost urgency and fairness. I ask for a proper examination of the evidence, a recognition of the unjust treatment I have endured, and the restoration of my rights and freedoms. It is my hope that by shedding light on the profound injustices I have faced, I can garner support from individuals and organizations who believe in the fundamental principles of justice and equality.</p><p>Together, let us challenge the systemic flaws that perpetuate such injustices and advocate for a justice system that upholds the rights and dignity of every individual, regardless of their background or circumstances.</p></li><li><p><code>Biased Judicial Proceedings and Violation of Due Process Rights:</code></p><p>The proceedings of my case reached the criminal court, presided over by west lander Judge . It has become evident that Judge has displayed a clear bias throughout the course of the trial, raising serious concerns about the fairness and impartiality of the judicial process. Moreover, the prosecutor, Peter Piku, has exhibited an obsessive determination to secure a conviction, further contributing to the injustice I have faced. Multiple requests have been made for Judgein west lander dismissal due to his demonstrated bias and failure to uphold the principles of fair judgment. One alarming instance of his partiality was when he forbade the translation of the case files into the French language, despite my proficiency in French. This denial of access to the translated files effectively impedes my ability to fully comprehend the proceedings, hindering my right to a fair defense and violating the principles of due process.</p><p>Furthermore, there have been disturbing instances where Judge rendered judgments without our presence, disregarding the fundamental tenets of constitutional law and legal procedure. In one particular incident, a judgment was issued without the presence of the prosecutor, and on two separate occasions, judgments were made without our own legal representation being present. Such actions not only undermine the integrity of the judicial system but also infringe upon our constitutional rights to a fair trial and legal representation.</p><p>It is crucial to highlight these flagrant violations of due process rights, as they underscore the need for urgent intervention and a comprehensive review of the proceedings. The principles of justice, fairness, and constitutional rights must prevail in every courtroom, and it is disheartening to witness the erosion of these principles in my case.</p><p>I call upon the Belgian judicial authorities to thoroughly investigate the actions of the Judge and address the concerns raised regarding his impartiality and adherence to due process. The preservation of justice demands an objective and unbiased judiciary that upholds the rights and protections enshrined in the constitution.</p><p>In seeking justice, it is imperative that we shed light on these violations and work towards ensuring that every individual, regardless of their circumstances, receives a fair and just trial. By holding those responsible for these breaches of constitutional rights accountable, we can strive towards a more equitable and transparent legal system that respects the fundamental rights of all individuals involved in legal proceedings.</p></li><li><p><code>Prolonged Delays and Postponements in the Legal Proceedings:</code></p><p>The legal proceedings in my case have been plagued by prolonged delays and repeated postponements, exacerbating the already arduous and distressing nature of this ordeal. It is disheartening to witness the continuous postponements, with the next hearing scheduled as far ahead as the 18th of August 2023. These frequent delays not only prolong the uncertainty and anxiety I experience but also undermine the principles of justice and due process. The protracted nature of the proceedings has a profound impact on my personal and professional life, as I remain in a state of limbo, unable to move forward or regain a sense of normalcy.</p><p>Such unwarranted delays not only hinder the timely resolution of the case but also perpetuate the profound injustices I have faced. Every delay further denies me the opportunity to present my case, seek justice, and restore my life to its rightful course. It is crucial to emphasize the importance of expeditious legal proceedings, ensuring that justice is not only served but is seen to be served.</p><p>I implore the Belgian judicial system to address the issue of prolonged delays in legal proceedings and take proactive measures to expedite the resolution of cases. Justice delayed is justice denied, and the prolonged postponements only serve to prolong the injustice I have endured for far too long.</p><p>By raising awareness about these delays, I hope to garner support and solidarity from individuals who believe in the fundamental principles of a fair and efficient judicial system. Together, let us strive for a legal system that respects the rights of all individuals and ensures a timely and just resolution to their cases.</p><p>In the face of these challenges, I remain resolute in my pursuit of justice and will continue to advocate for a fair and expeditious resolution to my case. Your support and solidarity are invaluable in this ongoing struggle for justice and the restoration of my rights and dignity.</p></li></ul><h2 id="h-media-coverage-manifestation-and-the-pursuit-of-justice" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Media Coverage, Manifestation, and the Pursuit of Justice:</h2><p>The media coverage surrounding my case has predominantly been focused in Lebanon, making it challenging to reach larger Belgian media outlets and garner broader attention to my plight. However, I have managed to compile a collection of media links from various Lebanese sources, which shed light on my situation and highlight the injustices I have faced.</p><div data-type="youtube" videoId="Td_WAZ5aIjM">
      <div class="youtube-player" data-id="Td_WAZ5aIjM" style="background-image: url('https://i.ytimg.com/vi/Td_WAZ5aIjM/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=Td_WAZ5aIjM">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><div data-type="youtube" videoId="o5F26U2C8hU">
      <div class="youtube-player" data-id="o5F26U2C8hU" style="background-image: url('https://i.ytimg.com/vi/o5F26U2C8hU/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=o5F26U2C8hU">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><div data-type="youtube" videoId="f1w4Km_PWIY">
      <div class="youtube-player" data-id="f1w4Km_PWIY" style="background-image: url('https://i.ytimg.com/vi/f1w4Km_PWIY/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=f1w4Km_PWIY">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.annahar.com/arabic/section/134-%D8%AA%D9%82%D8%A7%D8%B1%D9%8A%D8%B1-%D9%88%D8%AA%D8%AD%D8%A7%D9%84%D9%8A%D9%84/30042023075021942/%D8%B3%D9%8A%D9%85%D9%88%D9%86-%D8%AA%D8%A7%D8%AF%D8%B1%D9%88%D8%B3-%D8%B1%D8%AC%D9%84-%D8%A3%D8%B9%D9%85%D8%A7%D9%84-%D9%84%D8%A8%D9%86%D8%A7%D9%86%D9%8A-%D9%81%D9%8A-%D9%85%D8%AC%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B4%D9%81%D9%8A%D8%B1-%D9%8A%D8%B1%D9%88%D9%8A-%D9%84%D9%80%D8%A7%D9%84%D9%86%D9%87%D8%A7%D8%B1-%D9%82%D8%B5%D8%A9-%D8%A7%D8%AD%D8%AA%D8%AC%D8%A7%D8%B2%D9%87-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%85%D8%B1-%D9%81%D9%8A-%D8%A8%D9%84%D8%AC%D9%8A%D9%83%D8%A7-%D8%A3%D9%82%D8%B1%D8%A8-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%8A%D8%A7%D9%84">https://www.annahar.com/arabic/section/134-%D8%AA%D9%82%D8%A7%D8%B1%D9%8A%D8%B1-%D9%88%D8%AA%D8%AD%D8%A7%D9%84%D9%8A%D9%84/30042023075021942/%D8%B3%D9%8A%D9%85%D9%88%D9%86-%D8%AA%D8%A7%D8%AF%D8%B1%D9%88%D8%B3-%D8%B1%D8%AC%D9%84-%D8%A3%D8%B9%D9%85%D8%A7%D9%84-%D9%84%D8%A8%D9%86%D8%A7%D9%86%D9%8A-%D9%81%D9%8A-%D9%85%D8%AC%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%B4%D9%81%D9%8A%D8%B1-%D9%8A%D8%B1%D9%88%D9%8A-%D9%84%D9%80%D8%A7%D9%84%D9%86%D9%87%D8%A7%D8%B1-%D9%82%D8%B5%D8%A9-%D8%A7%D8%AD%D8%AA%D8%AC%D8%A7%D8%B2%D9%87-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%85%D8%B1-%D9%81%D9%8A-%D8%A8%D9%84%D8%AC%D9%8A%D9%83%D8%A7-%D8%A3%D9%82%D8%B1%D8%A8-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%8A%D8%A7%D9%84</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lebanondebate.com/m3/news/599739">https://www.lebanondebate.com/m3/news/599739</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.facebook.com/reel/625661745728369?fs=e&amp;s=TIeQ9V&amp;mibextid=0NULKw">https://www.facebook.com/reel/625661745728369?fs=e&amp;s=TIeQ9V&amp;mibextid=0NULKw</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.instagram.com/reel/Cr0q7jeotdZ/?igshid=MDJmNzVkMjY=">https://www.instagram.com/reel/Cr0q7jeotdZ/?igshid=MDJmNzVkMjY=</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://fb.watch/kjs7S7exiN/?mibextid=jf9HGS">https://fb.watch/kjs7S7exiN/?mibextid=jf9HGS</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.mtv.com.lb/News/%D9%85%D9%80%D9%80%D8%AD%D9%80%D9%80%D9%84%D9%80%D9%80%D9%8A%D9%80%D9%80%D8%A7%D8%AA/1360861/%D8%A3%D9%8A%D8%A7%D8%B1-%D8%A7%D9%84%D8%BA%D8%AF-%D8%A7%D8%B1--%D8%AD%D8%B1--%D9%88%D8%BA%D8%A8%D8%A7%D8%B1----%D9%88%D9%85%D9%86-%D8%AB%D9%85--%D8%A2%D8%B0%D8%A7%D8%B1-">https://www.mtv.com.lb/News/%D9%85%D9%80%D9%80%D8%AD%D9%80%D9%80%D9%84%D9%80%D9%80%D9%8A%D9%80%D9%80%D8%A7%D8%AA/1360861/%D8%A3%D9%8A%D8%A7%D8%B1-%D8%A7%D9%84%D8%BA%D8%AF-%D8%A7%D8%B1--%D8%AD%D8%B1--%D9%88%D8%BA%D8%A8%D8%A7%D8%B1----%D9%88%D9%85%D9%86-%D8%AB%D9%85--%D8%A2%D8%B0%D8%A7%D8%B1-</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://vm.tiktok.com/ZGJxGDPQB/">https://vm.tiktok.com/ZGJxGDPQB/</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://alnahdanews.com/article/147389-%D8%B1%D8%AC%D9%84-%D8%A7%D9%84%D8%A3%D8%B9%D9%85%D8%A7%D9%84-%D8%A7%D9%84%D9%84%D8%A8%D9%86%D8%A7%D9%86%D9%8A-%D9%81%D9%8A-%D9%85%D8%AC%D8%A7%D9%84-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B4%D9%81%D8%B1%D8%A9-%D8%B3%D9%8A%D9%85%D9%88%D9%86-%D8%AA%D8%A7%D8%AF%D8%B1%D9%88%D8%B3-%D9%8A%D8%B3%D8%B1%D8%AF-%D8%AA%D9%81%D8%A7%D8%B5%D9%8A%D9%84-%D8%A7%D8%AD%D8%AA%D8%AC%D8%A7%D8%B2%D9%87-%D9%81%D9%8A">https://alnahdanews.com/article/147389-%D8%B1%D8%AC%D9%84-%D8%A7%D9%84%D8%A3%D8%B9%D9%85%D8%A7%D9%84-%D8%A7%D9%84%D9%84%D8%A8%D9%86%D8%A7%D9%86%D9%8A-%D9%81%D9%8A-%D9%85%D8%AC%D8%A7%D9%84-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B4%D9%81%D8%B1%D8%A9-%D8%B3%D9%8A%D9%85%D9%88%D9%86-%D8%AA%D8%A7%D8%AF%D8%B1%D9%88%D8%B3-%D9%8A%D8%B3%D8%B1%D8%AF-%D8%AA%D9%81%D8%A7%D8%B5%D9%8A%D9%84-%D8%A7%D8%AD%D8%AA%D8%AC%D8%A7%D8%B2%D9%87-%D9%81%D9%8A</a></p><p>Despite the limitations in media coverage, I refuse to remain silent and have taken every opportunity to raise awareness about my case. Alongside supporters, I organized a small but impactful manifestation in front of the European Union headquarters. During the manifestation, we distributed flyers outlining the key aspects of my story, highlighting the violations of my rights and the injustices I have endured.</p><p>By engaging in peaceful protest and distributing information, we aimed to draw attention to the issues surrounding my case and the urgent need for a fair and just resolution. While the manifestation was a powerful display of unity and determination, it is disheartening that we have yet to see effective results in terms of concrete actions or changes.</p><p>Nevertheless, I remain committed to pursuing justice and raising awareness about the injustices I have faced. I will continue to explore avenues for advocacy, engage with relevant organizations and individuals, and utilize social media platforms to share my story and mobilize support.</p><p>I call upon the European Union, as well as other international human rights organizations, to investigate my case and intervene on behalf of justice and fairness. It is crucial that the international community recognizes the violations of my rights and the urgency of the situation.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8c1d64f5f847f736734eb5ade4edcc45b5c583b66bee3033b63526545c523747.jpg" alt="Last Manifestation" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Last Manifestation</figcaption></figure><p>In the face of adversity, I am grateful for the support and solidarity I have received thus far. I urge readers to stay informed, share my story, and join me in demanding a fair and just resolution to my case. Together, we can make a difference and hold those responsible accountable for the injustices inflicted upon me.</p><p>Please continue to follow my journey and support my pursuit of justice. Your voice and solidarity are invaluable in this ongoing battle for truth and fairness.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cb9ca283a9ff99fc5fbb8c485c27797c922acb07bb84f5dc69d6ffdd86039207.jpg" alt="#blockchainotchains" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">#blockchainotchains</figcaption></figure><h2 id="h-the-pursuit-of-truth-my-investigation" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">The Pursuit of Truth: My Investigation</h2><p>In the face of a justice system that deemed me guilty until proven innocent, I took it upon myself to conduct an extensive investigation to uncover the truth and reveal the identity of the real criminal behind the injustices I have endured. With the assistance of Karel Tinni, a blockchain forensic expert, and Chainalysis Reactor software, we delved into the intricacies of the stolen Dash cryptocurrency and the trail it left behind.</p><p>Our investigation led us through a complex web of mixers, attempting to obfuscate the origin and destination of the stolen funds. However, through meticulous analysis and the utilization of advanced tools, we were able to trace the funds to a Binance address. This breakthrough provided a crucial lead in identifying the individual responsible for the theft, a person known as &quot;Kratos.&quot;</p><p>Armed with this evidence, we presented our findings to the prosecutor, expecting that they would take our investigation into account and pursue further action. However, to our dismay, the prosecutor refused to acknowledge our findings, providing nothing more than feeble excuses to dismiss the evidence we had painstakingly gathered.</p><p>To shed light on the truth and expose the negligence or possible biases within the legal system, I have shared a Twitter thread outlining the analysis conducted by Karel Tinni and the significant discoveries we made during our investigation. By making this information public, I aim to hold accountable those who have disregarded the evidence and hindered the pursuit of justice.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/spuriousdragon/status/1665072317305704448?s=46">https://twitter.com/spuriousdragon/status/1665072317305704448?s=46</a></p><p>It is deeply disheartening to witness the dismissal of our investigation by the prosecutor, despite its substantial implications for my case. The refusal to consider this evidence only further underscores the hurdles and obstacles I have encountered in my quest for truth and justice.</p><p>I call upon the legal authorities to reconsider their position and give due consideration to the evidence we have presented. It is imperative that they approach this investigation with objectivity and impartiality, ensuring that the truth prevails and those responsible for the injustices I have faced are held accountable.</p><p>As I continue to fight for justice, I remain steadfast in my commitment to uncovering the truth and restoring my name and reputation. I am grateful for the support and encouragement I have received thus far and urge readers to share my story, amplify my voice, and demand a fair and thorough investigation into the evidence we have uncovered.</p><h2 id="h-messages-to-loved-ones-and-the-alleged-culprit" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Messages to Loved Ones and the Alleged Culprit :</h2><p>To my late father, I want to express the deep love and gratitude I hold for him. I wish I could have been by his side to bid him farewell and thank him for everything he did for me. He was an incredible and honest person, and his absence leaves an irreplaceable void in my life.</p><p>To my daughter, I want to apologize for the situation that my line of work has thrust upon us. I regret not being able to spend every precious moment with her, showering her with love and witnessing her growth. I want her to know that her freedom is paramount, and no government or individual should ever abuse it. I long for the day when we can be together again, cherishing each other&apos;s presence.</p><p>To my mother, I want to assure her that despite the physical distance between us, I am doing everything in my power to care for her. It pains me to see her endure such unfortunate circumstances, especially after the passing of my father. I will continue to strive to provide her with the medication, food, and support she needs. Not being able to be there for her during the days she needs me the most breaks my heart.</p><p>I would like to express my sincere gratitude to R.M., whom I didn&apos;t know before, for his generosity in providing me with a place to stay and other resources. His philanthropic actions and support have made a significant difference in my life during this challenging time. I consider him a father figure in a land where I had no one.</p><p>To the Lebanese ambassador, I extend my heartfelt appreciation for standing by my side from the very beginning. I am grateful for his support. I also want to remind him of the power he holds and the strength of the Lebanese people worldwide. I urge him to use his influence to help turn the tide and bring about a resolution to this injustice once and for all.</p><p><em>Lastly, I address the person whom I believe orchestrated the events that led to my wrongful conviction, but I will not disclose their name, referring to them as A.H. I want to remind them to right their wrongs. When the article was published, I reached out to them, emphasizing that I had no involvement in the situation. Although they contributed an enormous amount to help me with my bail and lawyers, I want to make it clear that I am completely unaware of their role in this heist. However, my friend has expressed doubt about the sudden influx of funds in their possession, noting the sale of significant amounts of crypto on my counter. Furthermore, I want to remind them that they lied during the investigation and that the Damien account is undeniably linked to them. We both know the truth, and I implore them to come forward, confess their actions, and be held accountable if they were indeed the thief. The Dure project, with its domain dure.io, was their idea, and they must acknowledge their involvement and take responsibility for their actions.</em></p><p>By sharing these messages, I hope to convey the emotional toll this ordeal has had on me and emphasize the need for resolution and reconciliation. It is my fervent hope that justice will prevail, allowing me to reunite with my loved ones and rebuild my life.</p><h2 id="h-addressing-the-belgian-justice-system" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Addressing the Belgian Justice System:</h2><p>With utmost respect and sincerity, I want to shed light on the shortcomings within the Belgian justice system that have contributed to my unjust ordeal. It is essential to emphasize the need for transparency, fairness, and impartiality within the system to prevent similar instances of injustice in the future.</p><p>First and foremost, I would like to highlight the damaging consequences of the lack of expertise and understanding within the system. The destruction of a tech entrepreneur&apos;s life due to ignorance is far more dangerous than mere incompetence. It is disheartening that my existence seems to have been disregarded within the Belgian system, with no medical records, insurance, or any support. I find myself in a state of complete nonexistence, with no access to basic necessities such as a mutuelle or income.</p><p>The release conditions imposed on me are unprecedented and draconian, even for Belgium, let alone Europe. These conditions, such as media interdiction and restrictions on freedom of speech, as well as the denial of a passport and the prohibition to work, are inhumane, unfair, and overly strict. They place me in a state of perpetual uncertainty and hinder my ability to rebuild my life.</p><p>Furthermore, the evident and flagrant biased behavior displayed by the prosecutor, coupled with the involvement of the US company and government, raises serious concerns about their hidden motives. It appears that they have strategically used the legal system to indirectly target the Lebanese politician Jebran Bassil while simultaneously undermining an honest and reputable tech entrepreneur. I have been dedicatedly forging connections within the cryptocurrency industry and tirelessly educating individuals about Bitcoin and the principles of monetary freedom.</p><p>This orchestrated and politically motivated assault extends beyond a mere attack on education and awareness. It is evident that the collapsing economic system, controlled by the American printer, serves as the backdrop for this subversive agenda. We possess compelling evidence pointing to ongoing and suspicious communications between the prosecutor, De Vuyst Willem, the US company, and the US government. These revelations heighten the specter of clandestine bribery and reinforce the notion that this is an orchestrated political attack aimed at destroying the life and achievements of Simon Tadros.</p><p>Given the gravity of these allegations, we urgently demand a comprehensive investigation into the data and communication records of not only the investigating judge and the Belgian prosecutor but also those of De Vuyst Willem, the US company, and the US government. The apparent collaboration and collusion among these entities, all operating with hidden agendas, cast a deep shadow of doubt on their true intentions. It is evident that they aim to exploit the law as a means to undermine the political future of the victim and achieve their own undisclosed objectives.</p><p>In conclusion, I call for a fair, transparent, and unbiased justice system that upholds the principles of justice for all individuals, including those involved in the cryptocurrency industry. It is my firm belief that justice should not be constrained by prejudice or ulterior motives but should serve as a beacon of truth and fairness. The resolution of my case will not only provide justice for me but will also set a precedent for the integrity of the Belgian justice system.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3d6534da8ee96b7d556bb5d6eb0b562c7ca0f9edee0805ee250fa3f9deedbb58.jpg" alt="Fair Trial" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Fair Trial</figcaption></figure><h2 id="h-donation-campaigns" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Donation Campaigns:</h2><p>In order to provide support for my family and sustain our fight for justice, I humbly request individuals to consider contributing to our cause through donation campaigns. These funds will play a vital role in covering the necessary legal expenses, gathering additional evidence to strengthen our case, and supporting our livelihood as we navigate through this challenging journey.</p><p>For those who wish to contribute, there are multiple options available:</p><p>Cryptocurrency Addresses: Donations can be made directly to specific cryptocurrency addresses associated with my case. These contributions will be used to further our legal efforts and pursue the truth. I will provide the relevant addresses for individuals who prefer this method.</p><p>GoFundMe Campaign: To facilitate ease of donation, a GoFundMe campaign has been set up to support our cause. This platform allows for secure and transparent contributions. The campaign details and link will be provided, giving individuals the opportunity to make a financial contribution and stand with us in our pursuit of justice.</p><p>AtomicSwap NFT Project: As the founder of the AtomicSwap NFT project, which aims to help individuals in the crypto community understand the market and fight against scams that have been prevalent since 2017, I invite supporters to contribute to this project. By supporting the AtomicSwap NFT project, not only will you contribute to our cause but also assist in creating awareness and safeguarding the crypto community from fraudulent activities. I will share the relevant links for individuals interested in supporting this initiative.</p><p>Your generosity and support will be instrumental in our fight for justice. Every contribution, regardless of its size, makes a significant impact and brings us one step closer to reclaiming our lives and proving our innocence.</p><p>Thank you for standing by us during this challenging time.</p><p>Donation Links:</p><p>Cryptocurrency Addresses:<strong>USDT (trc20) : TYkJj7LYLot122h8cUWvfTith24C7LJPnG</strong></p><p><strong>BTC:  bc1q8848l5277yw75xxulzh2kp33d3nvls2ukxcm9u</strong></p><p><strong>ETH : tadros.eth</strong></p><p><strong>BTC lightning : lnbc1pj960mcpp53tnscnxvs4qfsfv7el9x3ruq5alef96ye6wcxamqrxh4udjlepmsdqqcqzzgxqyz5vqrzjqwnvuc0u4txn35cafc7w94gxvq5p3cu9dd95f7hlrh0fvs46wpvhd263d9x8zfh9kgqqqqryqqqqthqqpyrzjqw8c7yfutqqy3kz8662fxutjvef7q2ujsxtt45csu0k688lkzu3ld263d9x8zfh9kgqqqqryqqqqthqqpysp5nrqyqnam83ewra3kn7uwnucmrxjkwxghlh9ya9ufp730vkt847ks9qypqsqxd8m2hexjpqsjalpx2xw665scqhd68u8et0lh3vwx696xqvt7fvre8au0y4ls2qumhf9mwaq7cl3xaeeyyyxzassz9pfm3a6xac45yspxdkxze</strong></p><p>GoFundMe Campaign:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.gofundme.com/f/the-harrowing-journey-of-injustice?utm_source=customer&amp;utm_medium=copy_link&amp;utm_campaign=p_cf+share-flow-1">https://www.gofundme.com/f/the-harrowing-journey-of-injustice?utm_source=customer&amp;utm_medium=copy_link&amp;utm_campaign=p_cf+share-flow-1</a></p><p>AtomicSwap NFT Project:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://atomicswap.vip/">https://atomicswap.vip/</a></p><h2 id="h-in-bitcoin-we-trust" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">In bitcoin we trust</h2><p>In this tumultuous journey, I have come to understand both sides of the cryptocurrency world. While it has been a burden that led to my unjust suffering, it has also been a lifeline that helped me endure until this day. Every technology possesses dualities, and it is up to us to determine how we wield its power.</p><p>I want to emphasize my favorite saying: &quot;Fiat money is protected by governments, but Bitcoin is protected by mathematics.&quot; This highlights the fundamental difference between traditional monetary systems and the decentralized nature of cryptocurrencies. It reminds us that while governments may influence and control fiat currencies, the foundation of Bitcoin lies in unyielding mathematical principles.</p><p>As we navigate the intricate landscape of technology, finance, and justice, let us remember that the choices we make in utilizing these tools are of utmost importance. It is our collective responsibility to harness the power of technology for the betterment of society, to uncover truth, and to ensure fairness prevails.</p><p>In conclusion, I stand before you, resolute in my pursuit of justice and truth. I will not be deterred by the challenges I face or the powerful forces aligned against me. With your support and our unwavering dedication, we can shape a future where justice, transparency, and the true potential of technology prevail.</p><p>Thank you for accompanying me on this arduous journey. Together, let us forge a path towards a world where justice is not a privilege but a universal right, where the power of technology is harnessed for the greater good of all.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a556e8d7aaf114a3aada4b29c6f2837d69ccc356227ed5fe726f3502b81e4282.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>i foreseen the future days before my arrest :</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rarible.com/token/0x60f80121c31a0d46b5279700f9df786054aa5ee5:1105729?tab=overview">https://rarible.com/token/0x60f80121c31a0d46b5279700f9df786054aa5ee5:1105729?tab=overview</a></p><p>My Last message</p><div data-type="youtube" videoId="uIoBLZndB1k">
      <div class="youtube-player" data-id="uIoBLZndB1k" style="background-image: url('https://i.ytimg.com/vi/uIoBLZndB1k/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=uIoBLZndB1k">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><p>#Simontadros the only king of bitcoin</p><div data-type="youtube" videoId="7yM9zJeDkJw">
      <div class="youtube-player" data-id="7yM9zJeDkJw" style="background-image: url('https://i.ytimg.com/vi/7yM9zJeDkJw/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=7yM9zJeDkJw">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><div data-type="youtube" videoId="0DZorJHx3Do">
      <div class="youtube-player" data-id="0DZorJHx3Do" style="background-image: url('https://i.ytimg.com/vi/0DZorJHx3Do/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=0DZorJHx3Do">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><p>#simontadros #mtv #lebanon #goldenape</p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/4f303496b87e676e7e1b104879f92cd91c000d4a53e8a6eb4fa05cd6013a7f93.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Smurf society X atomic swap raffle #2]]></title>
            <link>https://paragraph.com/@tadros/smurf-society-x-atomic-swap-raffle-2</link>
            <guid>sntttriFQuu9NreTwjR1</guid>
            <pubDate>Sun, 22 Jan 2023 23:47:30 GMT</pubDate>
            <description><![CDATA[Calling all warriors of the Smurf Kingdom!The time has come for us to rally together and defeat our enemy, Gargamel. And what better way to do that than by participating in the epic Smurf Society X Atomic Swap Raffle - Round 2! This is your chance to join the ranks of the Legendary NFT collection, set to mint early 2023. With web3 partnerships with The Sandbox, Polygon, Lens Protocol and more, the possibilities are endless. Visit https://www.premint.xyz/the-smurfs-society-x-atomic-swap/ to pa...]]></description>
            <content:encoded><![CDATA[<h2 id="h-calling-all-warriors-of-the-smurf-kingdom" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Calling all warriors of the Smurf Kingdom!</h2><p>The time has come for us to rally together and defeat our enemy, Gargamel. And what better way to do that than by participating in the epic Smurf Society X Atomic Swap Raffle - Round 2! This is your chance to join the ranks of the Legendary NFT collection, set to mint early 2023. With web3 partnerships with The Sandbox, Polygon, Lens Protocol and more, the possibilities are endless. Visit</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.premint.xyz/the-smurfs-society-x-atomic-swap/">https://www.premint.xyz/the-smurfs-society-x-atomic-swap/</a></p><p>to participate and for more information. But that&apos;s not all, as an added bonus, we are offering discounted prices for an additional 75 mercenaries to join our army. Don&apos;t miss out on this opportunity to become a part of something truly special.</p><h1 id="h-social-links" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Social links :</h1><ul><li><p>Twitter: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/SmurfsSociety">https://twitter.com/SmurfsSociety</a></p></li><li><p>Discord: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://discord.gg/smurfsociety">http://discord.gg/smurfsociety</a></p></li><li><p>Website: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://thesmurfssociety.com">https://thesmurfssociety.com</a></p></li><li><p>App: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.thesmurfssociety.com">https://app.thesmurfssociety.com</a></p></li><li><p>Gitbook/Wiki: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://thesmurfssociety.gitbook.io/the-smurfs-society">https://thesmurfssociety.gitbook.io/the-smurfs-society</a></p></li></ul><h1 id="h-about-atomic-lodge" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">About Atomic Lodge :</h1><p>Atomic swap NFT&apos;s is a membership to an order of transhumanist. Our collection is a set of 512 exclusive Ai generated imagery.Atomic Swap was founded by Simon Tadros in 2017, the purpose of this collection is to achieve wealth &amp; to create a solid decentralized monetary system.</p><ul><li><p>Website : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://atomicswap.vip">https://atomicswap.vip</a></p></li><li><p>Open Sea : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/collection/atomic-lodge">https://opensea.io/collection/atomic-lodge</a></p></li><li><p>Spatial : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://spatial.io/s/atomic-space-632bd6583c4c9f0001be88b2?share=697208222555517632">https://spatial.io/s/atomic-space-632bd6583c4c9f0001be88b2?share=697208222555517632</a></p></li><li><p>Twitter: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/atomicroadmap">https://twitter.com/atomicroadmap</a></p></li></ul><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://opensea.io/assets/ethereum/0x3F0303514da0C760CaBf836cAf4d7aaAfE0c587E/1">https://opensea.io/assets/ethereum/0x3F0303514da0C760CaBf836cAf4d7aaAfE0c587E/1</a></p><h1 id="h-mint" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Mint</h1><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://atomicswap.vip/">https://atomicswap.vip/</a></p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/a502171baedc003bdb1ca8babede61767c6316b15460795f1d8289ee3bc1fa71.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[hedge future and funding fees]]></title>
            <link>https://paragraph.com/@tadros/hedge-future-and-funding-fees</link>
            <guid>WNjPvibcZN2jAcHKGa0o</guid>
            <pubDate>Thu, 05 Jan 2023 00:33:17 GMT</pubDate>
            <description><![CDATA[What is Funding Fee Arbitrage between 2 exchanges based on different funding timing ? The funding rate in a perpetual futures contract can be used as part of a hedge strategy in the cryptocurrency market. A hedge is a financial strategy that is designed to reduce the risk of loss from adverse price movements in an asset. In the context of cryptocurrency trading, a hedge strategy using the funding rate might involve taking opposing positions in the the futures market and collect exchanges fund...]]></description>
            <content:encoded><![CDATA[<p><strong>What is Funding Fee Arbitrage between 2 exchanges based on different funding timing ?</strong></p><p>The funding rate in a perpetual futures contract can be used as part of a hedge strategy in the cryptocurrency market. A hedge is a financial strategy that is designed to reduce the risk of loss from adverse price movements in an asset. In the context of cryptocurrency trading, a hedge strategy using the funding rate might involve taking opposing positions in the the futures market and collect exchanges funding fees .</p><p><strong>Here&apos;s an example of how a hedge strategy using the funding rate might work:</strong></p><p>First you visit <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.binance.com/en/futures/funding-history/0">binance</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.kucoin.com/futures/contract/funding-rate-history/XBTUSDTM">kucoin</a> funding rate page to check the highest % return and the difference in timing between both exchanges.</p><p>Suppose that you funding rate of Bitcoin or $Solana or $link are the highest in term of yield . You take a long position or short position that yield the positive rate on the specific coin on the exchange that distribute the fees prior the second exchange where you take at the same time the same position in the opposite direction.</p><p>When the distribution occurs you close both positions at the same time collect your gains and reopen the same position in the opposite direction to collect the fees on the second exchange.</p><p>Fees are distributed 3 times a day every 8 hours yet with the method above you can collect 6 times a day and percentage might vary from 0.5 to 3 % on each collection to make a maximum of 18 % profit per day to 500 % per month with a minimal risk.</p><p>This is just one example of how a hedge strategy using the funding rate in a perpetual futures contract might work.</p><p>if you want to find out more just mint our community NFT and join a community <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://atomicswap.vip"><strong>Atomic Swap</strong></a> of elite developers traders invest and crypto punks since 2017.</p><p><strong>Funding fees :</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.coinglass.com/FundingRate">http://www.coinglass.com/FundingRate</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.kucoin.com/futures/contract/funding-rate-history/XBTUSDTM">https://www.kucoin.com/futures/contract/funding-rate-history/XBTUSDTM</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.binance.com/en/futures/funding-history/0">https://www.binance.com/en/futures/funding-history/0</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://atomicswap.vip">https://atomicswap.vip</a></p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/c404965ebf7988b3574d2f5f471daddddbaf9c1adae4af88f1881a89cb23de7d.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Sportbets and crypto casinos]]></title>
            <link>https://paragraph.com/@tadros/sportbets-and-crypto-casinos</link>
            <guid>oRCCrNKhBAIYxFtGqzJo</guid>
            <pubDate>Sun, 13 Nov 2022 02:31:44 GMT</pubDate>
            <description><![CDATA[Sportbets.io and Bitcasino.io are the best crypto gambling and sport betting in the space. Been in the crypto space since 2017 and being a gambling fan i experienced many casinos and betting platform until i made my choice. Bitcasino and sport bets are the most trusted regulated they also offer a high speed withdraw faster than any centralized exchange like Binance and Kucoin. They support many crypto currencies they have Metamask integration and a unique loyalty programing and the most excit...]]></description>
            <content:encoded><![CDATA[<p>Sportbets.io and Bitcasino.io are the best crypto gambling and sport betting in the space.</p><p>Been in the crypto space since 2017 and being a gambling fan i experienced many casinos and betting platform until i made my choice.</p><p>Bitcasino and sport bets are the most trusted regulated they also offer a high speed withdraw faster than any centralized exchange like Binance and Kucoin.</p><p>They support many crypto currencies they have Metamask integration and a unique loyalty programing and the most excited of all is the VIP treatment .</p><p>if you are a high roller u ll get the opportunity to get private jet and yacht trips around the work, a delightful accommodation and another layer of luxurious entertainment.</p><p>All you have to do deposit 100 000 USDT in your account and benefit from all this premium leisure .</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e44e69ab1b63ac9a902c670232980108c8ce2a61e842490e723b9ef8b8947a7a.jpg" alt="Wordcup 2022" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Wordcup 2022</figcaption></figure><p>As the World Cup is around the corner and you are big roller don&apos;t miss the opportunity to get access to the grand prize .</p><p>This grand prize comes with a ticket for you and your lucky guest. As if things couldn’t get any better, we are even treating you to a luxurious, paid business class flight and a 5-star accommodation in Qatar, a cruise aboard Bitcasino&apos;s exclusive yacht, and tickets to a game in the last-16 round, semi-finals, and finals, respectively.</p><p>To give the perfect ending to your dream-like getaway, you and your guest would be treated to a meet-and-greet dinner with the match ambassador of the respective game you attended. This match ambassador could be an artist, a coach or even your favorite football star!</p><h2 id="h-to-sign-up-and-enroll-to-normal-of-vip-program-and-get-2424-assistance-use-the-link-below" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">To sign up and enroll to normal of vip program and get 24/24 assistance use the link below :</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bitcasino.io/?refAff%5Bsource%5D=834dde61122&amp;refAff%5Baffid%5D=12128&amp;refAff%5Bcxid%5D=12128_466084">https://bitcasino.io/?refAff%5Bsource%5D=834dde61122&amp;refAff%5Baffid%5D=12128&amp;refAff%5Bcxid%5D=12128_466084</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://sportsbet.io/sports?refAff%5Bsource%5D=834dde61122&amp;refAff%5Baffid%5D=12128&amp;refAff%5Bcxid%5D=12128_509465">https://sportsbet.io/sports?refAff%5Bsource%5D=834dde61122&amp;refAff%5Baffid%5D=12128&amp;refAff%5Bcxid%5D=12128_509465</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/82d72e51ec32c7b305a7675f151f299e49a2cb5109578ea8d2f791315c84a97e.jpg" alt="Sportbets" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Sportbets</figcaption></figure><p>You can contact us any time on the following whatsap number :</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://wa.me/+96170224984">https://wa.me/+96170224984</a></p><p>or</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://wa.me/+96171111147">https://wa.me/+96171111147</a></p><p>happy Bets and all of luck !!!</p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/b251573543ad4695e25699eae36b6df99fdab7942223d2744027d78a114047a8.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[ZKROLL UP BATTLE]]></title>
            <link>https://paragraph.com/@tadros/zkroll-up-battle</link>
            <guid>Jykh3vKQUZ2DRENRR7ln</guid>
            <pubDate>Fri, 11 Nov 2022 02:19:37 GMT</pubDate>
            <description><![CDATA[http://dune.com is an online solution that anyone can create SQL queries on blockchain data for free. The results are visualized as charts. In this example i compare zksync vs arbitrum vs optimism vs polygon by size of daily depositor you can find the sql query at https://dune.com/queries/1493205 Code Sample :with zksync_summary as ( with depositors as (SELECT date, count(USER) AS deposits FROM (SELECT min(date) AS date, account AS USER FROM (SELECT date_trunc('day', min(evt_block_time)) AS d...]]></description>
            <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://dune.com">http://dune.com</a> is an online solution that anyone can create SQL queries on blockchain data for free. The results are visualized as charts.</p><p>In this example i compare zksync vs arbitrum vs optimism vs polygon by size of daily depositor you can find the sql query at</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dune.com/queries/1493205">https://dune.com/queries/1493205</a></p><p>Code Sample :</p><pre data-type="codeBlock" text="with zksync_summary as (
    with depositors as (SELECT date, count(USER) AS deposits
     FROM
     (SELECT min(date) AS date,
             account AS USER
      FROM
        (SELECT date_trunc(&apos;day&apos;, min(evt_block_time)) AS date, &quot;from&quot; AS account
         FROM erc20.&quot;ERC20_evt_Transfer&quot;
         where (
            &quot;to&quot; = &apos;\xaBEA9132b05A70803a4E85094fD0e1800777fBEF&apos; )
            and evt_block_time &gt;&apos;2020-06-01&apos;
            and evt_block_time &gt;= now() - interval &apos;{{in _ days}} days&apos;
            -- AND evt_block_time &gt;= &apos;{{date}}&apos;
            -- AND evt_block_time &lt; (DATE_TRUNC(&apos;day&apos;,CURRENT_TIMESTAMP))
         GROUP BY 2) AS a
      GROUP BY 2) AS b
   GROUP BY 1
   ORDER BY 1),
   
 depositors_eth as (SELECT date, count(USER) AS deposits_eth
   FROM
     (SELECT min(date) AS date,
             account AS USER
      FROM
        (SELECT date_trunc(&apos;day&apos;, min(block_time)) AS date, &quot;from&quot; AS account
         FROM ethereum.transactions
         WHERE (&quot;to&quot; = &apos;\xaBEA9132b05A70803a4E85094fD0e1800777fBEF&apos; )
         and block_time &gt;&apos;2020-06-01&apos;
         and block_time &gt;= now() - interval &apos;{{in _ days}} days&apos;
        --   AND evt_block_time &gt;= &apos;{{date}}&apos;
        --   AND evt_block_time &lt; (DATE_TRUNC(&apos;day&apos;,CURRENT_TIMESTAMP))
         GROUP BY 2) AS a
      GROUP BY 2) AS b 
   GROUP BY 1
   ORDER BY 1),
   
 bridge_interactions as (
    select COALESCE(depositors.date, depositors_eth.date) AS &quot;date&quot;, deposits+deposits_eth as total_deposits, sum(deposits+deposits_eth) over (order by depositors.date) as cumlative_deposits
    from depositors FULL OUTER JOIN depositors_eth on depositors_eth.date = depositors.date
)
    SELECT &apos;zksync&apos; as bridge_name, * 
    FROM bridge_interactions
    order by date DESC
) 
"><code><span class="hljs-keyword">with</span> zksync_summary <span class="hljs-keyword">as</span> (
    <span class="hljs-keyword">with</span> depositors <span class="hljs-keyword">as</span> (<span class="hljs-keyword">SELECT</span> <span class="hljs-type">date</span>, <span class="hljs-built_in">count</span>(<span class="hljs-keyword">USER</span>) <span class="hljs-keyword">AS</span> deposits
     <span class="hljs-keyword">FROM</span>
     (<span class="hljs-keyword">SELECT</span> <span class="hljs-built_in">min</span>(<span class="hljs-type">date</span>) <span class="hljs-keyword">AS</span> <span class="hljs-type">date</span>,
             account <span class="hljs-keyword">AS</span> <span class="hljs-keyword">USER</span>
      <span class="hljs-keyword">FROM</span>
        (<span class="hljs-keyword">SELECT</span> date_trunc(<span class="hljs-string">'day'</span>, <span class="hljs-built_in">min</span>(evt_block_time)) <span class="hljs-keyword">AS</span> <span class="hljs-type">date</span>, "from" <span class="hljs-keyword">AS</span> account
         <span class="hljs-keyword">FROM</span> erc20."ERC20_evt_Transfer"
         <span class="hljs-keyword">where</span> (
            "to" <span class="hljs-operator">=</span> <span class="hljs-string">'\xaBEA9132b05A70803a4E85094fD0e1800777fBEF'</span> )
            <span class="hljs-keyword">and</span> evt_block_time <span class="hljs-operator">></span><span class="hljs-string">'2020-06-01'</span>
            <span class="hljs-keyword">and</span> evt_block_time <span class="hljs-operator">>=</span> now() <span class="hljs-operator">-</span> <span class="hljs-type">interval</span> <span class="hljs-string">'{{in _ days}} days'</span>
            <span class="hljs-comment">-- AND evt_block_time >= '{{date}}'</span>
            <span class="hljs-comment">-- AND evt_block_time &#x3C; (DATE_TRUNC('day',CURRENT_TIMESTAMP))</span>
         <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> <span class="hljs-number">2</span>) <span class="hljs-keyword">AS</span> a
      <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> <span class="hljs-number">2</span>) <span class="hljs-keyword">AS</span> b
   <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> <span class="hljs-number">1</span>
   <span class="hljs-keyword">ORDER</span> <span class="hljs-keyword">BY</span> <span class="hljs-number">1</span>),
   
 depositors_eth <span class="hljs-keyword">as</span> (<span class="hljs-keyword">SELECT</span> <span class="hljs-type">date</span>, <span class="hljs-built_in">count</span>(<span class="hljs-keyword">USER</span>) <span class="hljs-keyword">AS</span> deposits_eth
   <span class="hljs-keyword">FROM</span>
     (<span class="hljs-keyword">SELECT</span> <span class="hljs-built_in">min</span>(<span class="hljs-type">date</span>) <span class="hljs-keyword">AS</span> <span class="hljs-type">date</span>,
             account <span class="hljs-keyword">AS</span> <span class="hljs-keyword">USER</span>
      <span class="hljs-keyword">FROM</span>
        (<span class="hljs-keyword">SELECT</span> date_trunc(<span class="hljs-string">'day'</span>, <span class="hljs-built_in">min</span>(block_time)) <span class="hljs-keyword">AS</span> <span class="hljs-type">date</span>, "from" <span class="hljs-keyword">AS</span> account
         <span class="hljs-keyword">FROM</span> ethereum.transactions
         <span class="hljs-keyword">WHERE</span> ("to" <span class="hljs-operator">=</span> <span class="hljs-string">'\xaBEA9132b05A70803a4E85094fD0e1800777fBEF'</span> )
         <span class="hljs-keyword">and</span> block_time <span class="hljs-operator">></span><span class="hljs-string">'2020-06-01'</span>
         <span class="hljs-keyword">and</span> block_time <span class="hljs-operator">>=</span> now() <span class="hljs-operator">-</span> <span class="hljs-type">interval</span> <span class="hljs-string">'{{in _ days}} days'</span>
        <span class="hljs-comment">--   AND evt_block_time >= '{{date}}'</span>
        <span class="hljs-comment">--   AND evt_block_time &#x3C; (DATE_TRUNC('day',CURRENT_TIMESTAMP))</span>
         <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> <span class="hljs-number">2</span>) <span class="hljs-keyword">AS</span> a
      <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> <span class="hljs-number">2</span>) <span class="hljs-keyword">AS</span> b 
   <span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> <span class="hljs-number">1</span>
   <span class="hljs-keyword">ORDER</span> <span class="hljs-keyword">BY</span> <span class="hljs-number">1</span>),
   
 bridge_interactions <span class="hljs-keyword">as</span> (
    <span class="hljs-keyword">select</span> <span class="hljs-built_in">COALESCE</span>(depositors.date, depositors_eth.date) <span class="hljs-keyword">AS</span> "date", deposits<span class="hljs-operator">+</span>deposits_eth <span class="hljs-keyword">as</span> total_deposits, <span class="hljs-built_in">sum</span>(deposits<span class="hljs-operator">+</span>deposits_eth) <span class="hljs-keyword">over</span> (<span class="hljs-keyword">order</span> <span class="hljs-keyword">by</span> depositors.date) <span class="hljs-keyword">as</span> cumlative_deposits
    <span class="hljs-keyword">from</span> depositors <span class="hljs-keyword">FULL</span> <span class="hljs-keyword">OUTER</span> <span class="hljs-keyword">JOIN</span> depositors_eth <span class="hljs-keyword">on</span> depositors_eth.date <span class="hljs-operator">=</span> depositors.date
)
    <span class="hljs-keyword">SELECT</span> <span class="hljs-string">'zksync'</span> <span class="hljs-keyword">as</span> bridge_name, <span class="hljs-operator">*</span> 
    <span class="hljs-keyword">FROM</span> bridge_interactions
    <span class="hljs-keyword">order</span> <span class="hljs-keyword">by</span> <span class="hljs-type">date</span> <span class="hljs-keyword">DESC</span>
) 
</code></pre><p>You can Find the comparison here but setting the duration by day and query the blockchain .</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dune.com/spuriousdragon/zkrollups">https://dune.com/spuriousdragon/zkrollups</a></p><p>Dune is the best product to query the blockchain it gives u the ability to visualize nfts defi bridges lending platforms on multiple chain .</p><p>it a must try powerfull product</p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/7033f2f2218c1fb378fc74ae490b9459d32a790299f73bd1c0ec6ab1ab2f4120.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[How to upload images on ceiling and floor in spatial ]]></title>
            <link>https://paragraph.com/@tadros/how-to-upload-images-on-ceiling-and-floor-in-spatial</link>
            <guid>cZyj5e2fTdybwfIrR1VF</guid>
            <pubDate>Tue, 09 Aug 2022 03:09:08 GMT</pubDate>
            <description><![CDATA[The Answer is straight forward you need to create it as an OBJ or GLTF . The easiest and fastest method is to use an online editor :https://app.vectary.com/ Open the editor drag and drop the image .import imageMake the object double sided by enabling the feature in the right menu .import the image by clicking on the right-upper burger menu → export → File Format > GLTF → DownloadExport to GLTFNow upload to Spatial.io and make some chaos.]]></description>
            <content:encoded><![CDATA[<h3 id="h-the-answer-is-straight-forward-you-need-to-create-it-as-an-obj-or-gltf-the-easiest-and-fastest-method-is-to-use-an-online-editor" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The Answer is straight forward you need to create it as an OBJ or GLTF . The easiest and fastest method is to use an online editor :</h3><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.vectary.com/">https://app.vectary.com/</a></p><p>Open the editor drag and drop the image .</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7533114960acbf6374a9653b35a96fe1f06094dd375e2bc1c229f779bd5f9b3a.png" alt="import image " blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">import image</figcaption></figure><p>Make the object double sided by enabling the feature in the right menu .</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a9cec436e73299651c3c80d7aec735a55abd96034cc1876b4fd6e46af922ed97.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>import the image by clicking on the right-upper burger menu → export → File Format &gt; GLTF → Download</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/67476918ef8f8134f8ce808184af9afa0e175a9944b239353db222aac4e5c5c4.gif" alt="Export to GLTF" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Export to GLTF</figcaption></figure><p>Now upload to Spatial.io and make some chaos.</p>]]></content:encoded>
            <author>tadros@newsletter.paragraph.com (SpuriousDragon)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/8a2453e64185eab13cda30eff819212f4ed2af48f341ff5773713cc8b48d51b8.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>