<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: DC</title>
    <description>The latest articles on DEV Community by DC (@dc600).</description>
    <link>https://dev.to/dc600</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2900291%2F39cae2b5-c4d4-436f-a982-cad67f3b24ae.jpg</url>
      <title>DEV Community: DC</title>
      <link>https://dev.to/dc600</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dc600"/>
    <language>en</language>
    <item>
      <title>Guide To Deploying A Trustless Eliza Agent With Oasis ROFL</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Thu, 28 May 2026 06:53:48 +0000</pubDate>
      <link>https://dev.to/dc600/guide-to-deploying-a-trustless-eliza-agent-with-oasis-rofl-48hh</link>
      <guid>https://dev.to/dc600/guide-to-deploying-a-trustless-eliza-agent-with-oasis-rofl-48hh</guid>
      <description>&lt;p&gt;Oasis introduced the framework for runtime off-chain logic (ROFL) to help build and run apps off-chain while ensuring privacy and maintaining trust with on-chain verifiability. For most people, this &lt;a href="https://www.youtube.com/watch?v=JFYnEyMFgRE" rel="noopener noreferrer"&gt;explainer video&lt;/a&gt; would be enough. But for developers and dApp builders, who want to try things out themselves, a deeper dive is worth it.&lt;/p&gt;

&lt;p&gt;In this tutorial, I will demonstrate how to build and deploy a trustless Eliza agent with Oasis ROFL.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Objective&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The objective is to have a working Eliza agent running inside a ROFL Trusted Execution Environment (TEE). I will also show how to get it registered and validated as a trustless agent in the &lt;a href="https://eips.ethereum.org/EIPS/eip-8004" rel="noopener noreferrer"&gt;ERC-8004&lt;/a&gt; registry. The agent's code will be fully auditable, and anyone can verify the authenticity of the origin of the deployed instance, which is immutable and tamper-proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Prerequisites&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Refer to the prerequisite section in the &lt;a href="https://dev.to/dc600/how-to-enhance-your-app-with-oasis-rofl-a-quickstart-tutorial-3n55"&gt;ROFL quickstart tutorial&lt;/a&gt; for setup details.&lt;br&gt;
So, right now, we need these to get started.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Docker&lt;/strong&gt; (or Podman) with credentials. It can be on docker.io, ghcr.io, or any other public OCI registry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Oasis CLI&lt;/strong&gt; and at least &lt;strong&gt;120 TEST&lt;/strong&gt; tokens in your wallet. Since we are building in the testnet environment, you can get these tokens for free from the &lt;a href="https://faucet.testnet.oasis.io/" rel="noopener noreferrer"&gt;official faucet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js 22+&lt;/strong&gt;. It is for Eliza and helper scripts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenAI API key&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RPC URL&lt;/strong&gt;. It is to access the ERC-8004 registry (e.g. Infura).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pinata JWT&lt;/strong&gt;. It is to store agent information in IPFS.&lt;/li&gt;
&lt;li&gt;At least &lt;strong&gt;2 GiB of memory&lt;/strong&gt; and &lt;strong&gt;10 GB of storage&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Eliza Agent Creation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The first step is to initialize a project using the ElizaOS CLI. Next, prepare it for ROFL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install bun and ElizaOS CLI&lt;/span&gt;
bun &lt;span class="nt"&gt;--version&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://bun.sh/install | bash
bun &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @elizaos/cli

&lt;span class="c"&gt;# Create and configure the agent&lt;/span&gt;
elizaos create &lt;span class="nt"&gt;-t&lt;/span&gt; project rofl-eliza
&lt;span class="c"&gt;# 1) Select Pqlite database&lt;/span&gt;
&lt;span class="c"&gt;# 2) Select the OpenAI model and enter your OpenAI key&lt;/span&gt;

&lt;span class="c"&gt;# Test the agent locally&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;rofl-eliza
elizaos start
&lt;span class="c"&gt;# Visiting http://localhost:3000 with your browser should open Eliza UI&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Containerize&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this step, you will need to containerize both the app and the ERC-8004 wrapper. &lt;br&gt;
You will notice that the Eliza agent startup wizard has already generated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dockerfile&lt;/strong&gt; - this packs your agent into a container. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;docker-compose.yaml&lt;/strong&gt; - this automatically configures, connects, and manages the interdependent &lt;strong&gt;postgres&lt;/strong&gt; and &lt;strong&gt;elizaos&lt;/strong&gt; containers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next step is to make some changes to &lt;strong&gt;docker-compose.yaml&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the PostgreSQL section, you need to replace relative &lt;strong&gt;image: ankane/pgvector:latest&lt;/strong&gt; with &lt;strong&gt;image: docker.io/ankane/pgvector:latest&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You need to name the &lt;strong&gt;elizaos&lt;/strong&gt; image with a corresponding absolute path, e.g. &lt;strong&gt;image: docker.io/YOUR_USERNAME/elizaos:latest&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You need to register the Eliza agent as a trustless agent in the ERC-8004 registry using the &lt;a href="https://github.com/oasisprotocol/erc-8004" rel="noopener noreferrer"&gt;&lt;strong&gt;rofl-8004&lt;/strong&gt;&lt;/a&gt; snippet. Ensure that the environment variables are mapped as is.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;docker-compose.yaml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;rofl-8004&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ghcr.io/oasisprotocol/rofl-8004@sha256:f57373103814a0ca4c0a03608284451221b026e695b0b8ce9ca3d4153819a349&lt;/span&gt;
    &lt;span class="na"&gt;platform&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;linux/amd64&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;RPC_URL=${RPC_URL}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PINATA_JWT=${PINATA_JWT}&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/run/rofl-appd.sock:/run/rofl-appd.sock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The validation flow looks something like this:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvikw8xthetw9s4i6pfpy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvikw8xthetw9s4i6pfpy.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have edited &lt;strong&gt;docker-compose.yaml&lt;/strong&gt;, it is time to build and push.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose build
docker compose push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are looking for full verifiability, you need to pin the digest by appending &lt;strong&gt;image: ...&lt;a class="mentioned-user" href="https://dev.to/sha256"&gt;@sha256&lt;/a&gt;:...&lt;/strong&gt; to all images in &lt;strong&gt;docker-compose.yaml&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Init &amp;amp; Create&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once all previous steps are complete, you will find that the agent is running in a container within a TEE. In this setup, ROFL handles the startup attestation of the container and the secrets in the form of environment variables. As a result, the TEE is completely transparent to the Eliza agent app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl init
oasis rofl create &lt;span class="nt"&gt;--network&lt;/span&gt; testnet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check out on-chain activity and app details in the &lt;a href="https://explorer.oasis.io/testnet/sapphire" rel="noopener noreferrer"&gt;Oasis Explorer&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Build ROFL bundle&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is where the memory and storage prerequisites come in handy.&lt;br&gt;
First, you need to update the resources section.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;rofl.yaml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2048&lt;/span&gt;
  &lt;span class="na"&gt;cpus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="na"&gt;storage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;disk-persistent&lt;/span&gt;
    &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you can build the ROFL bundle by invoking this command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Secrets&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this step, we take care of encryption. It involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;End-to-end encrypting of &lt;strong&gt;OPENAI_API_KEY&lt;/strong&gt; and storing it on-chain. &lt;/li&gt;
&lt;li&gt;Providing the &lt;strong&gt;RPC_URL&lt;/strong&gt; and &lt;strong&gt;PINATA_JWT&lt;/strong&gt; values for ERC-8004 registration.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;your-openai-key-here&amp;gt;"&lt;/span&gt; | oasis rofl secret &lt;span class="nb"&gt;set &lt;/span&gt;OPENAI_API_KEY -
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"https://sepolia.infura.io/v3/&amp;lt;YOUR_KEY&amp;gt;"&lt;/span&gt; | oasis rofl secret &lt;span class="nb"&gt;set &lt;/span&gt;RPC_URL -
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;your-pinata-key-here&amp;gt;"&lt;/span&gt; | oasis rofl secret &lt;span class="nb"&gt;set &lt;/span&gt;PINATA_JWT -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then comes the important step of storing the secrets as well as the previously built enclave identities on-chain.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Deploy&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This completes the building of the Eliza agent. Now, we need to deploy it to an ROFL provider.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Oasis-maintained provider is selected on Testnet, which rents a node for 1 hour by default. You can extend the rental period for more hours, say for 6 hours, by invoking &lt;strong&gt;oasis rofl machine top-up --term hour --term-count 6&lt;/strong&gt; &lt;a href="https://docs.oasis.io/build/tools/cli/rofl#deploy" rel="noopener noreferrer"&gt;command&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Test&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You have successfully built and deployed your very own Eliza agent. You can test if it is running properly with this CLI check.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Show machine details (state, proxy URLs, expiration).&lt;/span&gt;
oasis rofl machine show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A successful agent boot means the &lt;strong&gt;Proxy:&lt;/strong&gt; section will show the URL where the agent is accessible. So, for example if it shows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Proxy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;Domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;m1058.opf-testnet-rofl-25.rofl.app&lt;/span&gt;
  &lt;span class="na"&gt;Ports from compose file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;3000 (elizaos)&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://p3000.m1058.opf-testnet-rofl-25.rofl.app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, the app would be accessible at &lt;strong&gt;&lt;a href="https://p3000.m1058.opf-testnet-rofl-25.rofl.app" rel="noopener noreferrer"&gt;https://p3000.m1058.opf-testnet-rofl-25.rofl.app&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;ERC-8004 Registration and Validation&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is not an automatic step and needs to be completed to get this Eliza agent registered and validated as a trustless agent in the ERC-8004 registry. When you are running the agent for the first time, the &lt;strong&gt;rofl-8004&lt;/strong&gt; service will derive the Ethereum address for registering it. To go ahead, you will need to fund that account with some ETH to pay for the gas fees.&lt;/p&gt;

&lt;p&gt;Use this command to fetch your app logs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl machine logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;Please top it up&lt;/strong&gt; line will show the derived address. After funding it, your agent is registered and validated, and ready to go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please note&lt;/strong&gt;: All logs here are accessible to the app admin, as they are stored &lt;strong&gt;unencrypted on the ROFL node&lt;/strong&gt;. So, remember not to put any private information here.&lt;/p&gt;

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

&lt;p&gt;This guide shows how you can build your own agent, but if you need to check out a full-fledged demo of how it looks and works, there is an example in the official Oasis repository.&lt;br&gt;
&lt;a href="https://github.com/oasisprotocol/demo-trustless-agent" rel="noopener noreferrer"&gt;&lt;strong&gt;Trustless Agent Demo&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For a quick chat with the Oasis engineering team for help with specific issues, you can drop your comments in the &lt;strong&gt;dev-central channel&lt;/strong&gt; in the official &lt;a href="https://discord.com/invite/BQCxwhT5wS" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>trustless</category>
      <category>eliza</category>
      <category>agents</category>
    </item>
    <item>
      <title>Key Encumbrance: The Primitive That Makes Programmable Privacy Possible</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Wed, 27 May 2026 08:34:18 +0000</pubDate>
      <link>https://dev.to/dc600/key-encumbrance-the-primitive-that-makes-programmable-privacy-possible-n04</link>
      <guid>https://dev.to/dc600/key-encumbrance-the-primitive-that-makes-programmable-privacy-possible-n04</guid>
      <description>&lt;p&gt;Over the years, blockchain technology has unlocked key primitives that drive utility and adoption. Multisigs, multi-party computation, ERC-4337 (account abstraction), smart wallets, etc., have all contributed to making it more accessible and user-friendly. &lt;/p&gt;

&lt;p&gt;But problems persist. Public blockchains mean absolute transparency and on-chain visibility, leading to constant exposure and risk of exploitation. Then there is the need to always coordinate among people to enable the "multi" aspect for security. Most of the major chains are also siloed, and interoperability is still very limited in application. Moreover, key custody is binary, making private key management both challenging and often trust-dependent. And this does not inspire user confidence or mass adoption. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Key Encumbrance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Oasis has been at the forefront of privacy-first blockchain technology and utility, and has actively supported the development of primitives to advance this. &lt;br&gt;
Last year the protocol collaborated with researchers at IC3 and Cornell Tech to explore practical implementations of &lt;a href="https://oasis.net/blog/liquefaction-most-traded-nft-in-history" rel="noopener noreferrer"&gt;Liquefaction&lt;/a&gt; on Sapphire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key encumbrance&lt;/strong&gt; is a core benefit of Liquefaction that proposes an elegant solution for the pain points discussed earlier. Here, the private key is generated inside a TEE enclave and can only be interacted with through &lt;strong&gt;programmable policies&lt;/strong&gt;. &lt;br&gt;
As a result, the key is completely secure and tamper-proof, with neither the end users nor the delegates nor the operators and developers ever having access to the keys.    &lt;/p&gt;

&lt;p&gt;So, when users try to sign with their keys, that is only possible when the signature request satisfies the policy conditions. Simply stated, the key never leaves the secure enclave, and the policy enforcement is end-to-end encrypted and processed only inside the enclave. Therefore, the assets linked to the key enjoy complete security and privacy, and can be moved, traded, shared, or pooled without on-chain exposure or tracking.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How It Works&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The major question now is whether this is actually implementable. Short answer, yes.&lt;/p&gt;

&lt;p&gt;The USP is adding &lt;strong&gt;programmable policies&lt;/strong&gt; that must be passed before the key inside the TEE encrypts and signs the transaction on the target chain. Interestingly, this does not need a multisig solution, and a single entity can operate under multiple policy scopes.&lt;br&gt;
As a practical application of this concept, Oasis has developed encumbrance-powered vault infrastructure for DeFi, bringing privacy, security, and ease of use together.&lt;/p&gt;

&lt;p&gt;The architecture is simple, with a user interface where the application interacts with the functionality via an SDK. Any request or intent passes into the enclave, consisting of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A policy engine&lt;/li&gt;
&lt;li&gt;The encumbered key&lt;/li&gt;
&lt;li&gt;A transaction executor&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this setup, the request encounters the policy engine that stores the policies in a confidential smart contract. If and when the request satisfies the policy conditions, the key signs and authorizes the request. In case the policy conditions are not met, the request fails, and there is no further action. Simply put, instead of the user accessing and potentially exposing the private key, the key remains inaccessible within the enclave, and only meeting the policy criteria triggers the smart contract to sign the transaction.&lt;/p&gt;

&lt;p&gt;This system becomes particularly powerful when other chains are involved. Even though Oasis has its own network, users do not need to deposit the assets to Oasis, which simplifies interoperability. The assets are stored in a confidential container where the users can generate wallets for target chains and sign with them over programmable policies. So, the user assets stay where they are, while Oasis functions as the ultimate security layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Encumbrance? Why Not Multisig?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Multisigs have been useful for a long time, but come with limitations. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every action lives on-chain&lt;/li&gt;
&lt;li&gt;Users are locked to a single chain&lt;/li&gt;
&lt;li&gt;No action is possible without coordination and a quorum&lt;/li&gt;
&lt;li&gt;Enforcement needs a dedicated contract&lt;/li&gt;
&lt;li&gt;Delegation entails adding/removing signers, which also requires authorized signatures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key encumbrance&lt;/strong&gt; does away with these limitations.&lt;/p&gt;

&lt;p&gt;Adding or revoking access can be done by updating a policy. As the keys are never shared and truly private, the rules are enforced only through the policy engine.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;programmable policies&lt;/strong&gt; are the definitive point of difference, making encumbrance a groundbreaking and powerful primitive for future utility and user convenience. In practice, these policies come with tangible capabilities and benefits.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Non-custodial automatic execution&lt;/strong&gt;. If an asset's price threshold is breached, the enclave verifies with the policy condition, and the key signs a trade/sell. Neither manual approval is needed, nor is there a need for a bot with private key access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Composable policy chains&lt;/strong&gt;. Multi-chain functionality is in-built. So, profit from a sale or trading into a stablecoin can be routed to a different chain where it can earn passive yield - the entire process is maintained by using the policy engine without manual intervention or signing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scoped bot access&lt;/strong&gt;. By adding policies to an encumbered key - it can be anything, such as assigning a dollar value threshold, specifying transactional time windows, or assets whitelisted with pre-set criteria, bot usage can be streamlined. Here, the bot will access the signature via an API without ever having key access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Delegation without quorum&lt;/strong&gt;. Policy access can be programmed to have an expiry date of 30 days. With no key sharing, and keys managed and enforced inside TEEs, no human coordination or quorum criteria are needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Session-based gaming&lt;/strong&gt;. Application in gaming and related use cases where policy can pre-determine a threshold and time window, and handle signatures accordingly without needing to leave the game to approve transactions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Takeaway&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Current user experience in the blockchain and web3 space is riddled with poor key management and compromised access control. Encumbered keys make it possible for the next generation of applications to integrate programmability, privacy, and permissionless utility. &lt;br&gt;
The proof of concept is already under development by Oasis using its own tech stack and primitives - &lt;a href="https://oasis.net/solutions-defi" rel="noopener noreferrer"&gt;private DeFi with Privana&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Further reading: Primitives by Oasis&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://oasis.net/blog/storage-encryption-access-management" rel="noopener noreferrer"&gt;Decentralized Storage&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://oasis.net/blog/rofl-proxy-frontend-hosting" rel="noopener noreferrer"&gt;Proxy Support for Frontend Hosting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://oasis.net/blog/multichain-wallet-agents" rel="noopener noreferrer"&gt;Multi-chain Wallet&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://oasis.net/blog/decentralized-key-management-agents" rel="noopener noreferrer"&gt;Decentralized Key Management&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
      <category>privacy</category>
      <category>keymanagement</category>
    </item>
    <item>
      <title>How To Enhance Your App With Oasis ROFL: A QuickStart Tutorial</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Wed, 22 Apr 2026 14:34:03 +0000</pubDate>
      <link>https://dev.to/dc600/how-to-enhance-your-app-with-oasis-rofl-a-quickstart-tutorial-3n55</link>
      <guid>https://dev.to/dc600/how-to-enhance-your-app-with-oasis-rofl-a-quickstart-tutorial-3n55</guid>
      <description>&lt;p&gt;I have mentioned the Oasis ROFL (runtime off-chain logic) framework on several occasions. For most people, this &lt;a href="https://www.youtube.com/watch?v=JFYnEyMFgRE" rel="noopener noreferrer"&gt;explainer video&lt;/a&gt; would be enough. But for developers and dApp builders, who want to try things out themselves, a deeper dive is worth it. In this guide, I will give a quick introduction to ROFL and then share a QuickStart tutorial to help build a ROFL-powered app.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;ROFL in a nutshell&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The ROFL architecture consists of these distinct components: the hardware, the application, the remote attestation, the blockchain layers, and user interaction.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw120rnzzlxnj2hwrg6iu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw120rnzzlxnj2hwrg6iu.png" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Further, this 5-part process lays out how ROFL works.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3i24ftygqc2wqntg497.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3i24ftygqc2wqntg497.jpeg" alt=" " width="680" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From a developer's perspective, ROFL-powered apps run on Oasis nodes inside a Trusted Execution Environment (TEE), managed through the protocol's unique production-ready EVM runtime - Sapphire.&lt;/p&gt;

&lt;p&gt;When you use ROFL, you get the following support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker-like containers&lt;/strong&gt; or &lt;strong&gt;single executable apps&lt;/strong&gt;, based on what Trusted Compute Base (TCB) you are using, and what your threat model is&lt;/li&gt;
&lt;li&gt;Intel SGX/TDX ensures &lt;strong&gt;privacy and integrity&lt;/strong&gt;, and also provides a full update history and auditability&lt;/li&gt;
&lt;li&gt;Your app is registered, managed, and deployed on a permissionless pool of ROFL nodes, which means it is &lt;strong&gt;not censorable&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;There is a &lt;strong&gt;built-in Key Management Service&lt;/strong&gt; (KMS) that stores your app's secrets as well as secures key derivation inside the TEE&lt;/li&gt;
&lt;li&gt;Verifiable ROFL transactions originating from &lt;strong&gt;integration with Oasis Sapphire&lt;/strong&gt; that enable EVM-compatible confidential smart contracts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3pktopc68sekzhv4ikc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3pktopc68sekzhv4ikc.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Moreover, you don't need to build from scratch - you can just wrap your existing app into a ROFL-powered app. Let's see how.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;QuickStart&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There are 5 steps to enhance an app with ROFL power:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Initialize&lt;/strong&gt; the ROFL manifest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create&lt;/strong&gt; a new app on blockchain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt; a ROFL bundle&lt;/li&gt;
&lt;li&gt;Encrypt &lt;strong&gt;secrets&lt;/strong&gt; and store them on-chain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy&lt;/strong&gt; your app on a ROFL node&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Prerequisites&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Containerized App&lt;/strong&gt;&lt;br&gt;
First thing you need is a containerized app with a downloadable Docker-like image. Any public Open Container Initiative (OCI) repository works; however, you might like to choose from &lt;a href="https://docker.io/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; or &lt;a href="https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry" rel="noopener noreferrer"&gt;GitHub container registry&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If your app is not already running inside a container and you don't know how, follow this &lt;a href="https://docs.oasis.io/build/rofl/workflow/containerize-app/" rel="noopener noreferrer"&gt;step-by-step mini tutorial&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Oasis CLI&lt;/strong&gt;&lt;br&gt;
Next, you need the latest version of the Oasis Command Line Interface (CLI). Install it from &lt;a href="https://docs.oasis.io/build/tools/cli/setup" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tokens&lt;/strong&gt;&lt;br&gt;
Lastly, you will need about &lt;strong&gt;150 tokens&lt;/strong&gt; to cover ROFL registration, renting a machine, and paying for the gas fees. &lt;/p&gt;

&lt;p&gt;Now, you can either create a new account or import an existing one. Let's check out both processes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a new account&lt;/strong&gt; -&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis wallet create my_account &lt;span class="nt"&gt;--file&lt;/span&gt;.algorithm secp256k1-bip44
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later, you can choose to import this account to Metamask or other Ethereum-compatible tooling, e.g. Hardhat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Import an existing account&lt;/strong&gt; -&amp;gt; &lt;br&gt;
You need to export the &lt;strong&gt;secp256k1&lt;/strong&gt; private key or mnemonic from your existing wallet before running this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis wallet import my_account
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If you are working in a test environment, you can get free testnet tokens from the official &lt;a href="https://faucet.testnet.oasis.io/" rel="noopener noreferrer"&gt;faucet&lt;/a&gt;. &lt;br&gt;
If you are building on the mainnet, you will need to &lt;a href="https://docs.oasis.io/general/manage-tokens/#get-rose" rel="noopener noreferrer"&gt;buy ROSE&lt;/a&gt; tokens.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Initialize&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is the first step. You start by running &lt;strong&gt;&lt;a href="https://docs.oasis.io/build/tools/cli/rofl#init" rel="noopener noreferrer"&gt;oasis rofl init&lt;/a&gt;&lt;/strong&gt; using &lt;strong&gt;compose.yaml&lt;/strong&gt; inside your app folder. This will generate the ROFL manifest in the form of &lt;strong&gt;rofl.yaml&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, based on your requirement, you can change the &lt;strong&gt;memory&lt;/strong&gt;, specify the number of &lt;strong&gt;cpus&lt;/strong&gt;, and the root filesystem &lt;strong&gt;storage&lt;/strong&gt; section that comes under &lt;strong&gt;resources&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;rofl.yaml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-app&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.1.0&lt;/span&gt;
&lt;span class="na"&gt;tee&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tdx&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;container&lt;/span&gt;
&lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;512&lt;/span&gt; &lt;span class="c1"&gt;# in megabytes&lt;/span&gt;
  &lt;span class="na"&gt;cpus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="na"&gt;storage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;disk-persistent&lt;/span&gt;
    &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;512&lt;/span&gt; &lt;span class="c1"&gt;# in megabytes&lt;/span&gt;
&lt;span class="na"&gt;artifacts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;firmware&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/oasisprotocol/oasis-boot/releases/download/v0.6.2/ovmf.tdx.fd#db47100a7d6a0c1f6983be224137c3f8d7cb09b63bb1c7a5ee7829d8e994a42f&lt;/span&gt;
  &lt;span class="na"&gt;kernel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/oasisprotocol/oasis-boot/releases/download/v0.6.2/stage1.bin#e5d4d654ca1fa2c388bf64b23fc6e67815893fc7cb8b7cfee253d87963f54973&lt;/span&gt;
  &lt;span class="na"&gt;stage2&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/oasisprotocol/oasis-boot/releases/download/v0.6.2/stage2-podman.tar.bz2#b2ea2a0ca769b6b2d64e3f0c577ee9c08f0bb81a6e33ed5b15b2a7e50ef9a09f&lt;/span&gt;
  &lt;span class="na"&gt;container&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://github.com/oasisprotocol/oasis-sdk/releases/download/rofl-containers%2Fv0.8.0/rofl-containers#08eb5bbe5df26af276d9a72e9fd7353b3a90b7d27e1cf33e276a82dfd551eec6&lt;/span&gt;
    &lt;span class="na"&gt;compose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;compose.yaml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Create&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The next step is to create a new app on-chain. You can use the &lt;strong&gt;&lt;a href="https://docs.oasis.io/build/tools/cli/rofl#create" rel="noopener noreferrer"&gt;oasis rofl create&lt;/a&gt;&lt;/strong&gt; command for this.&lt;br&gt;
Please note that any newly created app in this process is registered by default on the Sapphire mainnet. If you are using a test environment, you will need to change the setting. So, you will be required to pass &lt;strong&gt;--network testnet&lt;/strong&gt; parameter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl create &lt;span class="nt"&gt;--network&lt;/span&gt; testnet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The check whether this transaction was successful is to find your app on the &lt;a href="https://explorer.oasis.io/testnet/sapphire/rofl/app" rel="noopener noreferrer"&gt;Oasis Explorer&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Build&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this step, we will build the ROFL bundle.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command results in the generation of a new .orc file inside your project folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Secrets&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is the step where privacy is enforced. So, if there are environment variables that your app is using, you can store them on-chain privately using the &lt;strong&gt;&lt;a href="https://docs.oasis.io/build/tools/cli/rofl#secret" rel="noopener noreferrer"&gt;oasis rofl secret&lt;/a&gt;&lt;/strong&gt; command. It would look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"my-secret-token"&lt;/span&gt; | oasis rofl secret &lt;span class="nb"&gt;set &lt;/span&gt;TOKEN -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command populates the &lt;strong&gt;TOKEN&lt;/strong&gt; secret. You can now use it in your compose file like this:&lt;br&gt;
&lt;strong&gt;compose.yaml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;python-telegram-bot&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;.&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ghcr.io/oasisprotocol/demo-rofl-tgbot:ollama"&lt;/span&gt;
    &lt;span class="na"&gt;platform&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;linux/amd64&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;TOKEN=${TOKEN}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to submit the secrets and the ROFL bundle information on-chain, you can do so with the &lt;strong&gt;&lt;a href="https://docs.oasis.io/build/tools/cli/rofl#update" rel="noopener noreferrer"&gt;oasis rofl update&lt;/a&gt;&lt;/strong&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Deploy&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is the final step of the process. Here, you use the &lt;strong&gt;&lt;a href="https://docs.oasis.io/build/tools/cli/rofl#deploy" rel="noopener noreferrer"&gt;oasis rofl deploy&lt;/a&gt;&lt;/strong&gt; command so that your app gets deployed to a ROFL provider.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command triggers the bootstrapping of a new machine that fits the required resources provided by Oasis. You can check the status of the machine using the &lt;strong&gt;&lt;a href="https://docs.oasis.io/build/tools/cli/rofl#machine-show" rel="noopener noreferrer"&gt;oasis rofl machine show&lt;/a&gt;&lt;/strong&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Oasis rofl machine show
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now also check your application logs to verify how everything works. You will need the &lt;strong&gt;&lt;a href="https://docs.oasis.io/build/tools/cli/rofl#machine-logs" rel="noopener noreferrer"&gt;oasis rofl machine logs&lt;/a&gt;&lt;/strong&gt; command for this.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;oasis rofl machine logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Parting words&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are a developer who likes the hands-on approach, I hope you had a good time trying out this tutorial and successfully deploying your first ROFL-powered app. &lt;br&gt;
You will note that in this guide, I have provided several links to the Oasis documentation instead of elaborating on them. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;containerize your app &lt;/li&gt;
&lt;li&gt;latest Oasis CLI release&lt;/li&gt;
&lt;li&gt;oasis rofl init&lt;/li&gt;
&lt;li&gt;oasis rofl create&lt;/li&gt;
&lt;li&gt;oasis rofl secret&lt;/li&gt;
&lt;li&gt;oasis rofl update&lt;/li&gt;
&lt;li&gt;oasis rofl deploy&lt;/li&gt;
&lt;li&gt;oasis rofl machine show&lt;/li&gt;
&lt;li&gt;oasis rofl machine logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's because I wanted to focus on the topic here without going into details on these commands, which require separate attention, and I will prepare other tutorials explaining them later on. &lt;/p&gt;

&lt;p&gt;For a quick chat with the Oasis engineering team for help with specific issues, you can drop your comments in the &lt;strong&gt;dev-central channel&lt;/strong&gt; in the official &lt;a href="https://discord.com/invite/BQCxwhT5wS" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>blockchain</category>
      <category>tee</category>
      <category>devex</category>
    </item>
    <item>
      <title>Need Truly Secure Digital Storage? The Answer Is Decentralized Storage + Privacy Layer</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Mon, 20 Apr 2026 10:42:08 +0000</pubDate>
      <link>https://dev.to/dc600/need-truly-secure-digital-storage-the-answer-is-decentralized-storage-privacy-layer-137a</link>
      <guid>https://dev.to/dc600/need-truly-secure-digital-storage-the-answer-is-decentralized-storage-privacy-layer-137a</guid>
      <description>&lt;p&gt;As our digital footprints expand, our data floats around the internet, unsupervised and unprotected. Cloud storage is a practical solution, but it does not focus on data security. Moreover, you no longer truly own your data. This is the pain point that decentralized storage tries to tackle. But privacy is not automatic, even in decentralized systems. An intentional architecture with privacy-by-design is the only answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Defining Decentralized Storage&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Traditional cloud storage uses location addressing. Here, the uploaded files, when they need to be accessed, can be retrieved from specific server URLs. In case of server outage or authorities implementing a takedown, the links stop working, and data becomes inaccessible, maybe lost forever. Now, some context: almost two-thirds of the global cloud infrastructure is currently handled by the Big 3 - AWS, Azure, and Google Cloud.&lt;/p&gt;

&lt;p&gt;This data concentration is what decentralized storage evolved to solve. Here, the content of the files is identified by cryptographic hash generation. This is a unique digital identifier and, being decentralized, there is no dependence on a single server. All nodes in the system will always produce the same content, thereby securing the data and its integrity. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdg4c8atyspkfcwnk5vdf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdg4c8atyspkfcwnk5vdf.png" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Top Decentralized Storage Protocols&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;All the protocols dealing with decentralized solutions have different approaches to digital storage. Let's take a look at the top 5 - IPFS (InterPlanetary File System), Filecoin, Arweave, Storj, and Sia.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwki7w5wecknfta6i1nw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxwki7w5wecknfta6i1nw.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IPFS&lt;/strong&gt; - This is the earliest solution in the form of peer-to-peer (P2P) protocol. Every uploaded file is broken into blocks, cryptographically hashed, and organized into a &lt;a href="https://docs.ipfs.tech/concepts/merkle-dag/" rel="noopener noreferrer"&gt;Merkle DAG&lt;/a&gt;. These generate a unique Content Identifier (CID) for the file, which can be accessed thanks to any of the 20k+ active peers in the IPFS public network. However, this does not guarantee data perpetuity, as none of the nodes may commit to storing the file over time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Filecoin&lt;/strong&gt; - This tries to solve the problem of persisting data by rewarding the nodes. It adds an economic incentive layer to IPFS. Two cryptographic proofs enhance the system. &lt;strong&gt;Proof-of-Replication&lt;/strong&gt; verifies the storage provider has created a unique physical copy of the data, while &lt;strong&gt;Proof-of-Spacetime&lt;/strong&gt; then continuously audits the provider to verify that they still hold the data over time. Filecoin stores almost 1,110 PiB of data, with clients that include the Smithsonian Institution and the Internet Archive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Arweave&lt;/strong&gt; - This is the next-level solution. One-time payment funds a storage endowment that pays out to the storage providers gradually over 200 or more years, assuming a declining storage cost of at least 0.5% annually. Here, a "blockweave" structure links each new block to both the previous block and a randomly selected older block, incentivizing historical data storage. Arweave processes over 30 million transactions daily out of approximately 300 million data requests per day.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Storj&lt;/strong&gt; and &lt;strong&gt;Sia&lt;/strong&gt; - These specifically cater to privacy-oriented decentralized solutions. Storj encrypts all data with AES-256-GCM. It is then sharded into 80 pieces and distributed among independent nodes. Any 29 out of 80 pieces coming together retrieves the data. For Sia, the sharding is in 30 pieces, and reconstruction needs only 10 pieces, with on-chain smart contracts enforcing the model, and performance review maintaining host standards. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Centralized Systems Lack Privacy&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Privacy failure is a constant threat in traditional cloud solutions, as the data handled in centralized data centres is huge and unwieldy, making it vulnerable to hackers and ripe for government tracking.&lt;/p&gt;

&lt;p&gt;According to an &lt;a href="https://www.ibm.com/think/insights/cost-of-a-data-breach-2024-financial-industry" rel="noopener noreferrer"&gt;IBM report&lt;/a&gt;, the global average breach cost, especially in cloud environments, is close to the $5 million mark. It slightly improved in the 2025 report, but healthcare continues to remain the top vulnerable sector, and breaches originating in the US alone crossed the $10 million mark.&lt;/p&gt;

&lt;p&gt;Legally authorised surveillance, typically without users' knowledge, combined with the ease with which providers can censor or erase data, makes true ownership an illusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5 Layers of Privacy In Current Decentralized Systems&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Decentralized storage that includes privacy mechanisms offers a solution to the problems posed by centralized systems. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client-Side Encryption&lt;/strong&gt; - Here, the data is encrypted in the user's device before being uploaded to the network. Storj and Sia do this automatically, but users of IPFS, Filecoin, or Arweave need to do it themselves. Centralized systems like AWS also encrypt data, but they own and hold the keys. Decentralized solutions give the key to the data owner upon encryption, which translates into no key, no data. But it also eliminates data loss through backdoor access. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sharding&lt;/strong&gt; - Here, the information in the encrypted files is split and shared across nodes in multiple locations. Individual hosts can view only the encrypted fragment stored with them. The data owner has sole access to the information, which is reconstructed together with the decryption key and the minimum number of fragments. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Erasure Coding&lt;/strong&gt; - Here, the user data is secured through resilience and redundancy without storing complete copies. So, in the case of the Storj model, 51 nodes (63% of the shards) can go offline simultaneously, and still, data can be retrieved. It is more efficient than three-copy replication without adding to the storage overhead.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Encryption in Transit and at Rest&lt;/strong&gt; - Here, Transport Layer Security (TLS) is used to protect the encrypted data as it moves between user devices and storage hosts. Encryption at rest also enhances data protection, so even if the physical device is stolen, the information remains unreadable. It is often combined with client-side encryption to ensure maximum data security.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero-Knowledge Proofs (ZKP)&lt;/strong&gt; - ZKP enables the storage providers to prove data storage without revealing the data itself. For example, Filecoin uses Zero-Knowledge Succinct Non-Interactive Arguments of Knowledge (zk-SNARKs) to cryptographically prove the presence of information without exposing the content.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjs2nikppe39hv83lye4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjs2nikppe39hv83lye4.png" alt=" " width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Privacy Gaps That Privacy-Preserving Blockchains Solve&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Decentralized storage without privacy-by-design is not truly secure, despite its advantages. &lt;/p&gt;

&lt;p&gt;For example, &lt;strong&gt;IPFS&lt;/strong&gt;, being the foundational protocol, is most at risk. Anyone who knows a CID can access the associated file. Besides, the CIDs, being deterministic, can be tracked. &lt;br&gt;
Same problem with &lt;strong&gt;Filecoin&lt;/strong&gt;, which also uses the IPFS model. In addition to the risk run by unencrypted files, it is vulnerable to traffic pattern analysis due to publicly available metadata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arweave's&lt;/strong&gt; perpetual data storage has its own risk - immutability. Unencrypted data is exposed forever; encrypted data is only secure with current encryption standards and is breakable with future advancements in cryptography and quantum computing. &lt;/p&gt;

&lt;p&gt;The answer lies in adding a privacy layer to the decentralized storage concept. &lt;br&gt;
Result: users can enjoy cheap, persistent, censorship-resistant data hosting services, with the privacy layer managing encryption keys and authorization logic, and also providing access control in a confidential environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Oasis&lt;/strong&gt; provides a unique and substantive solution, adding programmable privacy and access control policies to traditional &lt;a href="https://oasis.net/blog/storage-encryption-access-management" rel="noopener noreferrer"&gt;decentralized storage&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Trusted Execution Environments (TEEs) ensure data is encrypted at both input and output states, and any decryption and processing happens only inside the protection of hardware-isolated secure enclaves. So, a confidential smart contract is applied to the storage and runs on Oasis Sapphire. The TEEs hold encryption keys and access policies in a private state. The decryption key is accessible only for authorized users who have been verified inside the enclave. This effectively rules out any interference from node operators, storage providers, or validators. &lt;/p&gt;

&lt;p&gt;The access issue is handled by implementing the Liquefaction primitive. It is a level up from standard access control. Anyone can thus see access being granted or denied, but they will not know why. As a result, it is impossible to game the conditions and manipulate access. &lt;/p&gt;

&lt;p&gt;Oasis is, however, not the only protocol that is working on a privacy-focused infrastructure. &lt;strong&gt;Lit Protocol&lt;/strong&gt; also provides decentralized key management through threshold multi-party computation. &lt;/p&gt;

&lt;p&gt;Here is how plugging the privacy gaps works.&lt;br&gt;
&lt;strong&gt;First&lt;/strong&gt;, implement client-side encryption using keys managed by a privacy layer.&lt;br&gt;
&lt;strong&gt;Next&lt;/strong&gt;, upload the encrypted data to a decentralized storage protocol.&lt;br&gt;
&lt;strong&gt;Then&lt;/strong&gt;, register the CID and key metadata inside a confidential smart contract with clearly defined access policies. &lt;br&gt;
&lt;strong&gt;Finally&lt;/strong&gt;, the result is a system where the privacy layer verifies and authorizes access requests inside a TEE or multi-party computation network.&lt;br&gt;
&lt;strong&gt;Bottom line&lt;/strong&gt;: Data is encrypted, on-chain but confidential, and access is controlled, so no data exposure even if anyone somehow procures the CID, thus mitigating the risk of a single point of failure.   &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Real-World Use Cases&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NFT metadata&lt;/strong&gt; - One of the first mainstream utilities. Solved broken hosting issues common to centralized servers. Case in point, in 2025, over 12k NFTs were delisted. Now, Solana’s Metaplex framework uses Arweave as the default storage option, benefiting over 10k NFTs. Also, Yuga Labs migrated Bored Ape Yacht Club (BAYC) metadata away from centralized cloud to IPFS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI and data infrastructure&lt;/strong&gt; - The fastest growing segment. Filecoin’s Onchain Cloud launched as an official alternative to AWS for AI workloads. Also, Arweave’s AO hyper-parallel computing layer handles permanent data storage and computation of decentralized AI agents.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Healthcare&lt;/strong&gt; - One of the highest stakes for private digital data storage. Examples include projects like BurstIQ, Medicalchain, and Patientory using IPFS for encrypted patient data storage and blockchains for access and audit purposes. Also, Estonia’s national healthcare system uses blockchain-based infrastructure for record integrity. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Financial data&lt;/strong&gt; - Another high-stakes private digital data storage. Decentralized finance uses confidential computation and encrypted data for better privacy without needing a complete overhaul of existing architecture.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Takeaway&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;IPFS, Filecoin, and Arweave are better than traditional cloud systems in terms of censorship resistance, redundancy, and data integrity, and still, they are too public. Client-side encryption and sharding (Storj and Sia), ZKPs (Filecoin), and confidential access control (Oasis and Lit Protocol) provide viable privacy solutions for the future decentralized storage systems. &lt;/p&gt;

&lt;p&gt;Decentralized storage holds the key to secure digital storage of the future. The solution is production-ready, and awareness is the only missing piece of the puzzle. So, next time you go looking for truly secure digital storage, you know which door to knock.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>decentralizedstorage</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Agentic Economy With x402 Gets A Boost From ROFL's Verifiable, Private Compute Layer</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Mon, 23 Mar 2026 06:15:16 +0000</pubDate>
      <link>https://dev.to/dc600/agentic-economy-with-x402-gets-a-boost-from-rofls-verifiable-private-compute-layer-fdf</link>
      <guid>https://dev.to/dc600/agentic-economy-with-x402-gets-a-boost-from-rofls-verifiable-private-compute-layer-fdf</guid>
      <description>&lt;p&gt;Autonomous AI agents can do a lot of things, but for a long time, internet-native payments were out of their purview. So, when I first learned about x402, I was intrigued by the possibilities. But the privacy-first blockchain, Oasis, raises an important question: Is the agentic economy adequately addressing verifiable privacy? &lt;/p&gt;

&lt;p&gt;In this piece, I will explore x402, the value added by ERC-8004 in this context, as the standard for agent discovery, and the role Oasis's expertise in offering verifiable privacy with off-chain compute and on-chain trust can play.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;x402 101&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let's start with some context. x402 is not a recent discovery related to web3 or AI. It pre-dates even the privacy narrative, going back to those days when the internet (also known as web2 in web3 terminology) was still using "HTTP" rather than "HTTPS". The code 402 simply designated 'payment required'.&lt;/p&gt;

&lt;p&gt;The code was a stepping stone to internet-native payments, heralding a future in which servers could charge per request. But as long as online payment was not viable beyond theoretical discourse, this remained practically unused.&lt;/p&gt;

&lt;p&gt;How does web3 fit in this conversation? The answer lies in what web3 made possible. Stablecoins, sub-second settlement, no chargebacks, and scalable blockchain protocols have become quite the norm. This is when HTTP 402 can evolve into x402. This ensures an open standard, enabling web2's request-response loop and allowing any service to charge for API or content access over HTTP. &lt;br&gt;
Result: zero dependency on traditional accounts, sessions, or credentials. &lt;/p&gt;

&lt;p&gt;It is interesting to note how awareness of x402 emerged in the cryptoAI space. It was triggered as a &lt;strong&gt;&lt;a href="https://oasis.net/blog/erc-8004-trustless-agents" rel="noopener noreferrer"&gt;ERC-8004&lt;/a&gt;&lt;/strong&gt; utility. There is a close correlation between x402 and ERC-8004, enabling autonomous agents to trustlessly discover and transact. I will revisit this later.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;x402 Functionality&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So, how does x402 work? You start with a human/agent client, a server with the desired resource, and a facilitator (infra for payments). The following steps then unfold.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A request is made to a server, which could be anything, such as an API call or a piece of content&lt;/li&gt;
&lt;li&gt;This resource needs to be paid for&lt;/li&gt;
&lt;li&gt;The server responds with an HTTP 402 code&lt;/li&gt;
&lt;li&gt;The code comes with payment instructions, specifying the token type, the amount, the network, and the destination address&lt;/li&gt;
&lt;li&gt;The client-side wallet reads the 402 response and generates a signature authorizing the payment&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The variation in this process would depend on whether the client is human or an agent.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If human, a pre-programmed policy in the wallet's smart contract can eliminate the need for manual signature steps.&lt;/li&gt;
&lt;li&gt;If an agent, a pre-programmed policy in the wallet's smart contract can ensure that pre-set limits and rules are obeyed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An overview of the process flow (source: &lt;a href="https://docs.cdp.coinbase.com/x402/core-concepts/how-it-works):" rel="noopener noreferrer"&gt;https://docs.cdp.coinbase.com/x402/core-concepts/how-it-works):&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv2r9aaqdb0w43v6e41q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv2r9aaqdb0w43v6e41q.png" alt=" " width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Signature uses the &lt;strong&gt;transferWithAuthorization&lt;/strong&gt; function (&lt;a href="https://eips.ethereum.org/EIPS/eip-3009" rel="noopener noreferrer"&gt;EIP-3009&lt;/a&gt;). This means the client doesn't need to manage gas and private keys. This permission transaction, combined with a facilitator, enables seamless client sign-off on the transfer. Since anyone can submit it to the blockchain, the facilitator plays that role here.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The client's signed payment goes back to the server. There are a few steps before trust is established. First, the signature is forwarded to the facilitator's &lt;strong&gt;/verify&lt;/strong&gt; endpoint. Then, the signature's legitimacy is authenticated. Next, the facilitator's &lt;strong&gt;/settle&lt;/strong&gt; endpoint executes payment transfer. Finally, with all these steps complete, the server responds to the client's resource request.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This entire sequence of events occurs within a second or less with x402, ensuring smooth, composable payments. For the client, it is a simple HTTP code; for the agent, it is another API call.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;x402 In Practice&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Universal design -&amp;gt; seamless UI/UX.&lt;/strong&gt; x402 uses HTTP's standard operating procedure (SOP). So, there is no need to add additional tools or software development kits (SDKs) when integrating with existing infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web2-native.&lt;/strong&gt; Since x402 uses HTTP's SOP, it is also compatible with every major programming language, framework, and hosting platform on the internet. The seamlessness of web2 is thus replicated in web3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lightning-fast settlements.&lt;/strong&gt; Payment authorization only involves a single request-response and is completed in sub-seconds. The settlement is asynchronous and has instant finality, with the server trusting the facilitator for on-chain execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Micropayments.&lt;/strong&gt; Pricing granularity and tiny charges are made possible thanks to the zero-fee protocol and extremely low-cost transactions that only comprise of gas fees for the facilitator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Traditional solutions are closed systems, needing constant customization every time the platforms or API providers change. This is exactly the pain point x402 solves.&lt;br&gt;
Additionally, x402 enables micropayments, which were problematic earlier when everything would be bundled, by default, with subscriptions. &lt;a href="https://blog.cloudflare.com/introducing-pay-per-crawl/" rel="noopener noreferrer"&gt;Live example&lt;/a&gt; of the benefit includes pay-per-crawl APIs, where agents pay nano-payments to scrape content.&lt;/p&gt;

&lt;p&gt;Another crucial advantage of x402 is understood when we consider how this protocol can logically extend its functionality with agents on both sides of the request-response pairing.&lt;br&gt;
All this leads to setting up a new agentic future involving an autonomous agent economy. Consider this: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent 1 queries the data API, then hires Agent 2 to process the output, while paying a compute node to run simulations. &lt;/li&gt;
&lt;li&gt;Zero human intervention needed at any stage of the process.&lt;/li&gt;
&lt;li&gt;No restrictions by traditional payment rails.&lt;/li&gt;
&lt;li&gt;Result: All transactions conditional (payment only when valid response) and composable, running at thousands of fractional payments per minute/hour.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;x402 x ERC-8004 x ROFL&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The potential of x402 grows when integrated with other crypto primitives. &lt;/p&gt;

&lt;p&gt;As I mentioned earlier, x402 and ERC-8004 share a connection. X402 standardizes agentic payment, and ERC-8004 standardizes agentic discovery and introduces the need-for-trust factor. This is a critical factor we need to examine, as the data is exposed no matter what, whenever there is API access or inference.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://x.com/0xtestpilot/status/1981613172369871067" rel="noopener noreferrer"&gt;agentic trust gap&lt;/a&gt; is solvable. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbo76k06kdwkdrhejq8pl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbo76k06kdwkdrhejq8pl.png" alt=" " width="800" height="311"&gt;&lt;/a&gt;&lt;br&gt;
We know that ERC-8004 gives us the agent coordination/discovery layer, involving on-chain registries for identity, reputation, and validation, but it is neutral about establishing trust. The solution comes from the Oasis &lt;a href="https://oasis.net/ai-agents" rel="noopener noreferrer"&gt;ROFL&lt;/a&gt; (runtime off-chain logic) framework for trustless compute, providing data privacy, decentralized key management, and verifiable, tamper-proof execution.&lt;br&gt;
Together, the setup ensures code verification, key isolation, and end-to-end confidentiality.&lt;/p&gt;

&lt;p&gt;As we have seen in this x402 discussion, the facilitators play an important role. ROFL offers the opportunity to move away from highly centralized and opaque facilitators to a decentralized trustless TEE cloud for running the x402 facilitator. This can ensure that the payment layer is decentralized and verifiable even as the entire stack operates without extra, unnecessary trust assumptions.&lt;/p&gt;

&lt;p&gt;Check out this &lt;a href="https://x.com/peterus/status/1998369513444646923" rel="noopener noreferrer"&gt;example of a live public testnet deployment&lt;/a&gt; of a trustless and verifiable facilitator. There is also a sample implementation including a &lt;a href="https://github.com/oasisprotocol/rofl-x402-service" rel="noopener noreferrer"&gt;document summarization service&lt;/a&gt; that runs Ollama inference inside an ROFL container. And then there is a demo using multiple LLM models with &lt;a href="https://github.com/ptrus/verisage.xyz" rel="noopener noreferrer"&gt;cross-validation for oracle consensus&lt;/a&gt;. All of these being open-source, anyone can replicate or tweak for further developments.&lt;/p&gt;

&lt;p&gt;So, what is the final takeaway? x402, ERC-8004, and Oasis ROFL each solve a distinct layer of the agentic stack. Together, they make a trustless, private, composable agent economy not just conceivable but ready to be developed.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>http</category>
      <category>web3</category>
      <category>privacy</category>
    </item>
    <item>
      <title>The Flashback Labs Case Study On Privacy-first AI Training</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Fri, 20 Mar 2026 07:27:08 +0000</pubDate>
      <link>https://dev.to/dc600/the-flashback-labs-case-study-on-privacy-first-ai-training-2gbm</link>
      <guid>https://dev.to/dc600/the-flashback-labs-case-study-on-privacy-first-ai-training-2gbm</guid>
      <description>&lt;p&gt;Our interactions with AI and our shared experiences are growing exponentially. We know AI needs extensive training for all this, but how much thought or effort is put into ensuring data privacy? &lt;/p&gt;

&lt;p&gt;Oasis, as a privacy-first blockchain, has taken essential steps in bringing confidentiality to decentralized AI (DeAI). So, no wonder that Flashback Labs &lt;a href="https://oasis.net/blog/flashback-privacy-first-ai-training" rel="noopener noreferrer"&gt;adopted&lt;/a&gt; the game-changing technology of runtime off-chain logic (&lt;a href="https://www.youtube.com/watch?v=JFYnEyMFgRE" rel="noopener noreferrer"&gt;ROFL&lt;/a&gt;) to integrate verifiable privacy into their AI training setup. The result of that collaboration is the basis of this case study.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Decoding Flashback&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Flashback Labs helps train AI to understand people through lived human experiences. On their platform, a conversational AI app, people can interact with the AI to talk about their lives and preserve memories.&lt;/p&gt;

&lt;p&gt;How this works is: say you type in a prompt with a personal piece of conversation, or run a stream-of-consciousness with a voice assistant. The chatbot, like any other conversational AI model, will pick up the cue and ask follow-up personal questions. The data that flows as a result is structured around you personally - places, emotions, and timelines.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhzlszow1s6fq2oq2ix4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwhzlszow1s6fq2oq2ix4.png" alt=" " width="800" height="181"&gt;&lt;/a&gt;&lt;br&gt;
The Flashback app can then generate a short animated video from your inputs, using photos, text, and voice narration like a call-back memory. As you go through multiple sessions, a sort of graph forms in the AI database, and the more you use it, the more enriching your personal experience becomes. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Flashback x Oasis&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Flashback's platform deals with extremely sensitive information, from personal memories to relationships, even health-related or finance-related conversations, as a personalized experience is directly dependent on personal shares with the app. It is, therefore, critical that there is implicit trust.&lt;/p&gt;

&lt;p&gt;Opaque systems or even fully transparent decentralized solutions are ill-equipped to handle this. &lt;br&gt;
Oasis enters the equation here by becoming the encryption layer and plugging the trust gaps. &lt;/p&gt;

&lt;p&gt;The result is both elegant and crucial. Now, all the inputs ever made into the platform - photos, videos, stories, etc, are wallet-owned, processed and secured by &lt;a href="https://oasis.net/blog/verifiable-ai-with-tees" rel="noopener noreferrer"&gt;TEEs&lt;/a&gt; (trusted execution environments), and stored on-chain after being consented to by the user.&lt;/p&gt;

&lt;p&gt;Now, let's look at the AI training aspect. It entails dealing with massive datasets and processing them. Flashback uses 0G, BNB Greenfield as storage networks, but they do not offer data privacy. Oasis provides the ideal confidentiality solution to encrypt the data files before storing them. Users can verify on-chain that their encrypted data is safe and secure. &lt;br&gt;
Interestingly, Oasis has also been developing a dedicated solution for privacy-enabled &lt;a href="https://oasis.net/blog/storage-encryption-access-management" rel="noopener noreferrer"&gt;decentralized storage&lt;/a&gt; with programmable access control, which the ecosystem urgently needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Scaling Progress&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Flashback Labs has focused little on marketing hype or gimmick. Still, their initiative has struck a chord and fuelled a wide response and active participation. Some of the key milestones achieved include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;more than 1k users with close to 1k early contributions&lt;/li&gt;
&lt;li&gt;3k+ on-chain, encrypted files at the rate of almost 200 per day&lt;/li&gt;
&lt;li&gt;almost 10k on-chain transactions generated at the rate of almost 700 per day&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The metrics, growing as more users come in, tell a clear story - private AI is getting scaled.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Flash Forward: What Future Promises&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The case study of Flashback Labs and its success is a huge step forward for DeAI, as its target is the mainstream audience, and its use cases are not part of traditional crypto utility. &lt;/p&gt;

&lt;p&gt;At the moment, as &lt;a href="https://www.flashbacklabs.com/" rel="noopener noreferrer"&gt;Flashback&lt;/a&gt; goes through its roadmap for 2026, the team has multiple products underway. One is related to Alzheimer's care, while another is a product developed in collaboration with notable bereavement non-profits in the US to help people cope with the process of loss of a family member.&lt;/p&gt;

&lt;p&gt;There are also plans to develop an agentic framework that empowers Flashback's AI rendering to proactively reach out to users for memory collection and preservation. Hardware integration, like in robotic companion devices, to assist in hospice and elder care settings, is another promising development. &lt;/p&gt;

&lt;p&gt;The bottom line: personalized AI is going to be more and more an integral part of our memorable experiences, and the data confidentiality that this undertaking must assure is non-negotiable, both during training and in storing the processed data. And, Oasis is the industry expert for this solution - verifiable privacy. &lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>web3</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Do You Vibe Code? A DeAI Primer By Oasis</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Wed, 18 Mar 2026 07:40:56 +0000</pubDate>
      <link>https://dev.to/dc600/do-you-vibe-code-a-deai-primer-by-oasis-3h8j</link>
      <guid>https://dev.to/dc600/do-you-vibe-code-a-deai-primer-by-oasis-3h8j</guid>
      <description>&lt;p&gt;AI integration is moving fast, and the accessibility to develop AI is becoming easier by the day. The &lt;a href="https://oasis.net/blog/oasis-building-blocks-decentralized-ai" rel="noopener noreferrer"&gt;decentralized AI (DeAI)&lt;/a&gt; space has also picked up momentum as the new-gen web3 solutions all come with an AI edge. So, if you are a web3 developer, it is no longer imperative that you be a Solidity expert or know the ins and outs of building on-chain applications. Vibe coding is your friend.&lt;/p&gt;

&lt;p&gt;In this guide, I will show you new tools and help you learn how to build with AI on Oasis, with privacy by default. We will be using an &lt;strong&gt;llms.txt&lt;/strong&gt; file, a &lt;strong&gt;Context7&lt;/strong&gt; MCP integration, for the purpose of this tutorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;AI context&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AI is prone to forgetting, and its way of remembering needs some understanding. To understand AI memory and context, check out this &lt;a href="https://oasisrose.garden/lessons/ai-memory/" rel="noopener noreferrer"&gt;Oasis Academy course&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Suffice it to say, large language models (LLMs) need context to respond to any prompts, especially when you are asking them to build something. So, patchy memory or outdated context might result in a code that looks correct on a quick review but fails in practice. There are two possible solutions so that the AI tool can directly access Oasis docs to correctly consult instead of hallucinating, and I will outline them both.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;llms.txt&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model context protocol (MCP)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;llms.txt&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For anyone familiar with AI, this is a standardized file format. It functions like a sitemap and is specifically designed for AI so that it can access a project's documentation as a structured index. It provides a brief description of the documentation and links to detailed markdown files for the AI to find and read.&lt;/p&gt;

&lt;p&gt;For our purpose, we will be referring to these files:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://docs.oasis.io/llms.txt" rel="noopener noreferrer"&gt;https://docs.oasis.io/llms.txt&lt;/a&gt; — a curated index with page titles, descriptions, and URLs&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.oasis.io/llms-full.txt" rel="noopener noreferrer"&gt;https://docs.oasis.io/llms-full.txt&lt;/a&gt; — the complete documentation content consolidated in one file&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the AI supports project context, such as Cursor's docs feature or a &lt;strong&gt;CLAUDE.md&lt;/strong&gt; file, good. Alternatively, copy-pasting the URLs in the LLM chat directly works too.&lt;/p&gt;

&lt;p&gt;The usefulness of having two versions is dictated by AI memory and context limits. &lt;strong&gt;llms.txt&lt;/strong&gt; is designed for a quick overview, and &lt;strong&gt;llms-full.txt&lt;/strong&gt; is when you need the AI to know everything, unabridged.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;MCP&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;MCP is an open standard. If you don't use MCP, then AI will only read the prompt submitted at face value. Using MCP not only gives AI structured access to all external context - documentation, codebases, tools, and runtime information- but also enables the AI to refer to them on demand and query external tools if and when needed.&lt;/p&gt;

&lt;p&gt;As mentioned earlier, Oasis documentation is indexed on &lt;strong&gt;Context7&lt;/strong&gt;, an MCP server that serves docs to AI coding assistants. The library ID is &lt;strong&gt;llmstxt/oasis_io_llms_txt&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Setting Up&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I will show here Cursor and Claude as primary tools, as they are the most popular among vibe coders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using Cursor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first step is to add the following snippet to your .cursor/mcp.json:&lt;br&gt;
json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"context7"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp.context7.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will prompt Cursor to connect to Context7. So, now when you generate code, you will have full access to the Oasis documentation. &lt;br&gt;
&lt;strong&gt;Pro tip&lt;/strong&gt;: It is advisable to add a rule to your Cursor settings so that the AI always consults the Oasis docs. It can be phrased like this - Always use Context7 MCP with library ID &lt;strong&gt;llmstxt/oasis_io_llms_txt&lt;/strong&gt; for Oasis documentation reference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using Claude&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
bash&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;The next step is to verify configuration is correctly done:&lt;br&gt;
bash&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you see context7 listed, you are good to go.&lt;br&gt;
&lt;strong&gt;Pro tip&lt;/strong&gt;: The same rule applies for your project's &lt;strong&gt;CLAUDE.md&lt;/strong&gt; - Always use &lt;strong&gt;Context7&lt;/strong&gt; MCP with library ID &lt;strong&gt;llmstxt/oasis_io_llms_txt&lt;/strong&gt; for Oasis documentation reference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Other AI tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even though Cursor and Claude are popular choices, you may be using other AI tools such as VS Code, JetBrains, Windsurf, Zed, etc. &lt;strong&gt;Context7&lt;/strong&gt; supports 40+ clients, and you can refer to the &lt;a href="https://context7.com/docs/resources/all-clients" rel="noopener noreferrer"&gt;&lt;strong&gt;full list here&lt;/strong&gt;&lt;/a&gt; to check the setup instructions specific to your tool of choice.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Before We Start&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you are set up, there are still a few things you will need before starting to vibe code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Node.js&lt;/strong&gt;: This is required for Hardhat. You can check if your terminal has it installed by &lt;strong&gt;running node -v&lt;/strong&gt;. It will show a version number, if it is already available. If not, download the LTS version from &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;https://nodejs.org/en&lt;/a&gt;, install it, then reopen your terminal and recheck to confirm successful installation. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wallet&lt;/strong&gt;: Since we are working with DeAI, you will need a &lt;a href="https://docs.oasis.io/general/manage-tokens/#the-wallets" rel="noopener noreferrer"&gt;wallet&lt;/a&gt; with its private key. &lt;br&gt;
If using CLI, refer to this: &lt;a href="https://docs.oasis.io/build/tools/cli/wallet" rel="noopener noreferrer"&gt;https://docs.oasis.io/build/tools/cli/wallet&lt;/a&gt;. The best approach is to create a new &lt;a href="https://metamask.io/download/" rel="noopener noreferrer"&gt;MetaMask&lt;/a&gt; wallet. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Testnet tokens&lt;/strong&gt;: You will need testnet tokens, too, in the wallet to proceed with your vibe coding. First, you need to add the Sapphire testnet to your &lt;a href="https://docs.oasis.io/general/manage-tokens/#metamask" rel="noopener noreferrer"&gt;MetaMask wallet&lt;/a&gt;. You can then request free TEST tokens from &lt;a href="https://faucet.testnet.oasis.io/" rel="noopener noreferrer"&gt;https://faucet.testnet.oasis.io/&lt;/a&gt;. Remember to select &lt;strong&gt;Sapphire&lt;/strong&gt; from the network dropdown and provide the wallet address created above.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Example: Deploying a Confidential Smart Contract&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I will use a basic example here to demonstrate how this will all work. Once you have connected your Integrated Development Environment (IDE) with the Oasis MCP, start a fresh project. Let's use this prompt:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Create a confidential smart contract on Sapphire with Hardhat. It should store a secret message that only the owner can set. Anyone can submit a guess, but the actual secret should never be visible on-chain.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Your chosen AI tool will immediately pull the documentation and perform the following steps seamlessly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify the correct Hardhat config.&lt;/li&gt;
&lt;li&gt;Infer that the contract state on Sapphire is private by default.&lt;/li&gt;
&lt;li&gt;Generate a working contract with a full project structure, including a deploy script, interaction examples, and tests. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that Claude will ask for permission before running commands. So, you might want to select "don't ask again" if you prefer. &lt;br&gt;
There will also be a &lt;strong&gt;.env.example&lt;/strong&gt; file generated in the process. You need to copy it to &lt;strong&gt;.env&lt;/strong&gt; and add your wallet's private key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For those developers who are new to the decentralized setup, the private key can be found on your MetaMask wallet account with these steps: click the three dots next to the account name → account details → reveal private keys → enter password. &lt;br&gt;
This private key will have to be added to the &lt;strong&gt;.env&lt;/strong&gt; file as &lt;strong&gt;PRIVATE_KEY=0x...&lt;/strong&gt;, and then deployed:&lt;br&gt;
bash&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run deploy:testnet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you see a contract address returned in your terminal, it confirms the successful deployment of a confidential smart contract live on the testnet, using just the prompt mentioned at the start of this segment.&lt;/p&gt;

&lt;p&gt;You can further test the confidentiality of the contract when you try calling &lt;strong&gt;eth_getStorageAt&lt;/strong&gt; on your contract at &lt;a href="https://explorer.oasis.io/testnet/sapphire" rel="noopener noreferrer"&gt;Oasis Explorer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As Oasis enables verifiable privacy and confidential computation, this is the gateway to developing private applications. You can start exploring the possibilities at &lt;a href="https://oasis.net/" rel="noopener noreferrer"&gt;https://oasis.net/&lt;/a&gt; and start vibe coding to build the next-gen dApps. With your AI coding tool connected to the docs, it will be the model doing all the work.&lt;/p&gt;

&lt;p&gt;Sources referred: &lt;a href="https://docs.oasis.io/build/tools/llms/" rel="noopener noreferrer"&gt;https://docs.oasis.io/build/tools/llms/&lt;/a&gt;&lt;br&gt;
Help needed? Ask the dev team: &lt;a href="https://oasis.io/discord" rel="noopener noreferrer"&gt;https://oasis.io/discord&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>ai</category>
      <category>web3</category>
      <category>privacy</category>
    </item>
    <item>
      <title>AI Has a Memory Problem. Decentralization and Privacy Might Have a Solution. Part 3</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Mon, 23 Feb 2026 11:26:51 +0000</pubDate>
      <link>https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-3-2288</link>
      <guid>https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-3-2288</guid>
      <description>&lt;p&gt;In the &lt;a href="https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-1-14ib"&gt;first part&lt;/a&gt; of this 3-part series, I covered AI memory and its classification, while in the &lt;a href="https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-2-3kpk"&gt;second part&lt;/a&gt;, I discussed in detail the types of AI memory and security risks associated with the architectures.&lt;br&gt;
Here, I will refer to Oasis technology for a potential solution to AI memory pain points through the decentralization and privacy approach. I will also talk about some working use cases for portable AI memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Zero-Trust and DeAI Solutions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There are two distinct pain points of the AI memory architectures: security threats, and data silos and redundancy.&lt;/p&gt;

&lt;p&gt;As a believer in decentralized AI (DeAI), I think the solution to attack risks is best addressed by security-first architectures that adopt a Zero-Trust model. &lt;br&gt;
How does this work? Basically, all data is monitored at the ingestion stage, and any sensitive information is identified and redacted before it moves to the vector storage phase. &lt;strong&gt;Role-Based Access Control&lt;/strong&gt; (RBAC) and &lt;strong&gt;Attribute-Based Access Control&lt;/strong&gt; (ABAC) are enforced at the retrieval layer. Result: the system only considers document subsets that the specific user is authorized to see.&lt;/p&gt;

&lt;p&gt;Now, what about the other pain point - information silos and redundant work? Simple answer: it is preventable. Let's understand how, with reference to the multi-agent collaboration we discussed regarding stateful memory loops. &lt;br&gt;
DeAI ensures a shared workspace allowing different agents (for example, an Architecture Agent and an Implementation Agent) to work in tandem, querying and updating the same memory instance. This is also the seed for AI context flow, where data silos do not result in context loss.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Role of Confidential Computing and Oasis Tech&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A serious bottleneck in ensuring secure AI memory is protecting the data being computed. Traditional encryption can handle data at rest and in transit. But what about the information that is decrypted during the actual retrieval and inference processes?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hardware-Backed Privacy via TEEs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Confidential Computing is the answer to this security gap, utilizing hardware-backed Trusted Execution Environments (TEEs). The secure enclaves isolate memory as the content is made cryptographically inaccessible to any unauthorized access, even by the infrastructure operators. For the AI systems, the prompts and embeddings are only decrypted inside the enclave's black box. As a result, the vector searches and inference building can occur smoothly without exposing any raw data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxdvalr5q9qlvfeorgy6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxdvalr5q9qlvfeorgy6.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The reason to use Oasis technology as a reference to a potential solution for secure AI memory is how it combines and optimizes on-chain and off-chain components - the first production-ready confidential Ethereum Virtual Machine (EVM), &lt;strong&gt;&lt;a href="https://oasis.net/sapphire" rel="noopener noreferrer"&gt;Sapphire&lt;/a&gt;&lt;/strong&gt;, and the Runtime Off-chain Logic (&lt;strong&gt;&lt;a href="https://oasis.net/decentralized-ai" rel="noopener noreferrer"&gt;ROFL&lt;/a&gt;&lt;/strong&gt;) framework. By utilizing hardware isolation (Intel SGX/TDX), it is ensured that transaction inputs, return values, or the internal state of the smart contract remain confidential at all times.&lt;/p&gt;

&lt;p&gt;For complex AI memory systems requiring computation-heavy processing, Oasis utilizes the ROFL framework instead of wholesale on-chain logic. So, model training and inference can be done securely off-chain while verifiable settlement can happen on-chain. This combination is the foundation for trustless AI agents that can manage private keys and sensitive user context within a secure enclave. The personal information and sensitive data consequently become a portable, secure asset.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Industry-Specific Implementations of AI Memory&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;What AI memory architectures need vary across regulated industries needing dynamic blueprints for solutions. Let's talk about healthcare and finance as the two most highly impacted areas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Healthcare&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here, AI systems must adhere to strict standards like the Health Insurance Portability and Accountability Act (HIPAA) and Health Information Trust Alliance (HITRUST) to protect electronic Protected Health Information (ePHI). Such a memory architecture must include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Retention Architectures&lt;/strong&gt;: Data is isolated and cannot be reused for any other training purpose. A volatile memory approach is ideal where data is processed in-memory and immediately discarded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FHIR-First Data Foundations&lt;/strong&gt;:The Fast Healthcare Interoperability Resources (FHIR) standard helps create a standardized operational data layer. This eliminates schema chaos and enables AI assistants to retrieve clinical facts using a shared, consistent language. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditability and Explainability&lt;/strong&gt;: Verifiable audit trails for agentic workflows ensure that we know which medical databases were accessed and why. This is critical for regulatory compliance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Finance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here, there needs to be a fine balance between collaborative analytics and exposure to private and proprietary data through transparency. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Secure Multi-Party Computation (SMPC)&lt;/strong&gt;: An example would be where multiple banks are analysing transaction data for fraud detection, but no single institution can access another’s private customer records.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Homomorphic Encryption&lt;/strong&gt;: Financial institutions use this to perform computations directly on encrypted data, ensuring that sensitive financial parameters are never exposed during processing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Working Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are already a few companies that are working on solutions for AI memory problems and tackling how to implement portable memory systems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://plurality.network/" rel="noopener noreferrer"&gt;&lt;strong&gt;Plurality&lt;/strong&gt;&lt;/a&gt; is developing the Open Context Layer. It allows users to autonomously store their data and chats in specific memory buckets for better context management, and also for sharing.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.memsync.ai/" rel="noopener noreferrer"&gt;&lt;strong&gt;MemSync&lt;/strong&gt;&lt;/a&gt; is building the Unified Memory Layer. It allows users to create a persistent “digital twin” based on personalized conversation and knowledge. This enables the AI system to know the user, track their evolving ideas, and serve as a private sounding board for reflection and decision-making.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ekailabs.xyz/" rel="noopener noreferrer"&gt;&lt;strong&gt;Ekai&lt;/strong&gt;&lt;/a&gt; is offering a developer-focused solution. It allows users to switch among various AI models via smart model routing without context loss.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Takeaway&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The future of AI memory? A &lt;strong&gt;portable context model&lt;/strong&gt;. This means that you, as a user, are not obligated to commit to a single model or AI assistant, or have your digital history trapped in large platforms like OpenAI or Anthropic. When you move and switch as you need and choose, the memory travels with you, encrypted and under control, working like a neutral, interoperable memory layer.&lt;/p&gt;

&lt;p&gt;Realizing this vision requires a fundamental reimagining of memory as infrastructure. We can combine stateful memory loops, DeAI, and confidential computing technologies like Oasis ROFL and Sapphire to build AI systems that are smarter and personalized while also being fundamentally secure and user-owned. &lt;strong&gt;Result: Private, portable AI memory that is a sovereign asset, free from data privacy liability.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources referred:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://oasisrose.garden/lessons/ai-memory/" rel="noopener noreferrer"&gt;Oasis Academy course&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.forbes.com/sites/digital-assets/2025/12/12/why-crypto-needs-portable-ai-memory/" rel="noopener noreferrer"&gt;Forbes article by Marko Stokić&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>machinelearning</category>
      <category>ai</category>
      <category>web3</category>
      <category>privacy</category>
    </item>
    <item>
      <title>AI Has a Memory Problem. Decentralization and Privacy Might Have a Solution. Part 2</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Mon, 23 Feb 2026 09:11:35 +0000</pubDate>
      <link>https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-2-3kpk</link>
      <guid>https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-2-3kpk</guid>
      <description>&lt;p&gt;In the &lt;a href="https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-1-14ib"&gt;first part&lt;/a&gt; of this 3-part series, I covered AI memory and its classification. &lt;br&gt;
Here, I will start with a deep dive into the types of AI memory, and then discuss the pain points in AI memory architectures.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A Deep Dive Into AI Memory Classification&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;As I mentioned in the first part, how human and AI memory work is different. The broad classification of short-term and long-term AI memory requires further analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short-Term Memory: Managing Ephemeral Context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This spans a single conversation session. The memory is preserved temporarily across a few prompts and responses. The context window, thus, encompasses the whole chat in the session, utilizing sliding windows or token-based buffers.&lt;/p&gt;

&lt;p&gt;Short-term memory can be hence defined as the system’s ability to maintain continuity within a specific session or task. Working memory is a subset of short-term memory. While working memory only deals with tokens being processed immediately, short-term memory can strategically manage continuity to a certain extent as the conversation grows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation Strategies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's start by understanding why short-term memory fails. Simply because it outgrows the context window and hence cannot remember beyond the model's token limit. To counter this, the system can delete and overwrite earlier information or, because it is full, fail to add new information, leading to memory failure and possible hallucination.&lt;br&gt;
There are three techniques to manage this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conversation Buffers&lt;/strong&gt;: These maintain a list of recent messages. There are two types of buffers - &lt;strong&gt;full&lt;/strong&gt;, which remembers everything, and &lt;strong&gt;windowed&lt;/strong&gt;, which retains the last few turns, ensuring the model works within its limits and the earlier context is not totally lost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Summarization&lt;/strong&gt;: This technique compresses the conversation history into a concise summary of essential facts by forgetting redundant details. While this can extend the session limits, nuances from earlier context might get filtered out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Budgeting&lt;/strong&gt;: This optimization technique is a variation of summarization where only the system prompt and the latest five turns are preserved, pruning the rest. Research suggests this middle data is often ignored by models anyway, and hence discarding that portion of the context is an acceptable approach.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Key-Value (KV) cache plays a vital role in short-term memory. It preserves the exact attention patterns of recent turns and can sometimes perform better than standard Retrieval-Augmented Generation (RAG). There is, however, a trade-off between speed and memory capacity. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long-Term Memory: Shift to Persistent and Adaptive Knowledge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This spans multiple conversation sessions. The memory is preserved for longer periods, resulting in better context. External databases (vector databases, key-value stores) help to refer to persistent data outside the model.&lt;/p&gt;

&lt;p&gt;Long-term memory can be hence defined as the system’s ability to maintain continuity across sessions and days, sometimes even weeks, months, or years. It builds relationships rather than transactions, as external databases synchronize with the model’s built-in knowledge, and RAG is the single-most critical technology to achieve this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAG Pipeline and Role of Vector Databases&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A typical RAG architecture computes information only one-way. Documents are converted into high-dimensional vector embeddings and stored in a vector database. The advantage of the RAG system is that the data is organized based on semantic meaning instead of literal matches.&lt;/p&gt;

&lt;p&gt;So, when a user submits a prompt, the system embeds the query and retrieves a chunk of data that is most similar. This information is pulled into the context window, and the AI can generate answers based on private, proprietary, or real-time data, not necessarily part of its original training. Research suggests this can cut down factual errors and increase efficiency. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwtaynl2zn3zsf80d3c1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwtaynl2zn3zsf80d3c1.png" alt=" " width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From Stateless RAG to Stateful Memory Loops&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An essential point to note here, if it has not been apparent, is that RAG is fundamentally stateless. What does this mean? It means that every query is independent, and its significance lies in the fact that the system does not learn anything from interacting with the user. The next logical step is, therefore, moving towards stateful AI memory architectures that can operate as a continuous loop of learning.&lt;/p&gt;

&lt;p&gt;There are 4 critical components of a truly stateful memory system.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Extraction&lt;/strong&gt;: First, the LLM evaluates user interactions to identify and filter salient facts or user preferences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synthesis and Learning&lt;/strong&gt;: Next, synchronization between new information and existing knowledge takes place. The system determines whether new information is a new addition entirely or an overwriting of older, redundant data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflict Resolution&lt;/strong&gt;: Next, any contradiction arising from the new data addition is resolved by the intelligent agentic system so that consistency and continuity are maintained.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consolidation&lt;/strong&gt;: Finally, all knowledge deemed as significant is moved from the short-term context to a long-term Memory Graph or relational store.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It stands to reason that such a stateful loop needs multi-agent collaboration. &lt;/p&gt;

&lt;p&gt;Since we are discussing the various types of AI memory, there is another that deserves mention - &lt;strong&gt;User Profile Memory&lt;/strong&gt;. It is usually a subset of the long-term memory with particular emphasis on the user and their preferred language, time zone, conversational and response style, etc. These structured user profiles are stored in databases and injected into prompts, giving the appearance of personalized conversations.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Security and Privacy Risks in AI Memory Architectures&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrlheidn68hu0og97ayw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmrlheidn68hu0og97ayw.png" alt=" " width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI memory is built over time, processing through huge and complex datasets that can encompass critical and sensitive information. As vector databases and RAG pipelines become live memory, there is an inevitable vulnerability to severe, crippling security threats.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Leakage and Unauthorized Access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is related to the exposure of Personal Identifiable Information (PII) or proprietary content. RAG systems pull context from a vast range of documents and sources. All the data needs to be properly cleaned, classified, and scoped so that the AI models do not reveal sensitive facts by mistake. This type of context leakage is common when prompts by one user retrieve another user’s private embeddings due to misconfigured access controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embedding Inversion and Data Poisoning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embedding Inversion&lt;/strong&gt; occurs when embeddings in the vectors, which are essentially high-dimensional semantic relationships, are inverted, leading to the reconstruction of the original source text, compromising anonymity. &lt;br&gt;
&lt;strong&gt;Data Poisoning&lt;/strong&gt; occurs when malicious actors inject false or adversarial data through subliminal texts hidden in documents into a knowledge base accessed by the model, leading to erroneous or harmful responses.&lt;/p&gt;

&lt;p&gt;In the &lt;a href="https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-3-2288"&gt;concluding part&lt;/a&gt; of the series, I will discuss a potential solution in decentralized and privacy-first AI, along with a mention of working use cases of portable AI memory.&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>ai</category>
      <category>web3</category>
      <category>privacy</category>
    </item>
    <item>
      <title>AI Has a Memory Problem. Decentralization and Privacy Might Have a Solution. Part 1</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Mon, 23 Feb 2026 06:21:45 +0000</pubDate>
      <link>https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-1-14ib</link>
      <guid>https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-1-14ib</guid>
      <description>&lt;p&gt;We are on the cusp of an AI revolution. AI agents today are building social networks, negotiating contracts, and even contributing to creativity, like making music. All aspects of our lives are affected every day, as we can choose from a range of AI models and assistants for our interactions and experiences. But there is a chronic problem with AI that often flows under the radar. AI has a memory problem.&lt;/p&gt;

&lt;p&gt;Anyone who uses an AI solution has faced it. It does not matter whether you are using Claude, GPT, or anything else; it does not matter whether you are a developer or an end user. If we ever need to switch models, we have to start again from scratch, rebuilding the context of our conversations every time. The same forgetfulness can also happen across different sessions or between different chats in the same model. &lt;/p&gt;

&lt;p&gt;Here in this 3-part series, I will discuss what AI memory is, how it works, what types there are, the pain points regarding its architecture, and a potential solution through decentralization and privacy, with Oasis technology as a reference. I will also mention a few working use cases tackling the AI memory problem.&lt;br&gt;
In the first part, I will cover AI memory and its classification.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What is AI memory?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;AI memory is the ability of an AI system to retain, recall, and use information from past interactions. While human memory is associative due to being organic, AI associations come from data engineering and code-based architecture. In other words, Large Language Models (LLMs) do not and cannot remember anything. Every interaction is processed fresh. So, what appears to be memory is basically an association achieved through engineering and algorithms.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Human brain&lt;/strong&gt;: a biological organ where memory is always on, where learning, remembering, and forgetting happen organically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM&lt;/strong&gt;: a codebase that learns and forgets, but can be made to remember by being given contextual refreshers manually or by smart engineering on a short-term basis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Context Window&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before expanding on the different types, it is useful to note that the context window is the most basic form of AI memory. This is quantifiable and measured in &lt;strong&gt;tokens&lt;/strong&gt; or the amount of text that any given model can process in a single interaction. Approximately 150 tokens can constitute about 100 words. And every word in an interaction, those you send and those the AI responds with, together make up the context window limit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Context Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most conversations with an AI model consist of multiple prompts. What we do not know as an end user is that the system does not remember previous messages. So, what happens? The system typically resends the entire conversation history as part of each new request. Take this example.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You send “Hello” -&amp;gt; AI sees: [Hello]&lt;/li&gt;
&lt;li&gt;You send “How are you?” -&amp;gt; AI sees: [Hello, AI reply, How are you?]&lt;/li&gt;
&lt;li&gt;You send “Tell me about crypto” -&amp;gt; AI sees: [Hello, AI reply, How are you?, AI reply, Tell me about crypto]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As the conversation carries on, the token count also increases. On reaching the context window limit, the older messages get dropped. This is where AI forgetfulness and hallucination begin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context Window Sizes (Typical in 2025)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxk3kzsg19shl6ronhgh2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxk3kzsg19shl6ronhgh2.png" alt=" " width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Any long, detailed conversation can thus stretch and exhaust even high token capacity models. That is why we need more advanced memory systems. &lt;/p&gt;

&lt;p&gt;In 2026, the trends indicate that 1M+ token capacity is going to become common, with more focus on scale and performance. For example, top-tier models (e.g., potential Llama 4 iterations) can reach up to 10 million tokens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Active Models&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Qwen3-Coder-480B&lt;/strong&gt;: Designed for coding with a 256K to 1M token range.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 2.5 Pro&lt;/strong&gt;: Offers 1M+ token windows, with 2M+ expected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-4.1 Turbo&lt;/strong&gt;: 128K–1M tokens with advanced "Context Compression" to manage efficiency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The context window size increase without "smarter" context management is, however, also problematic, as it can lead to "needle in a haystack" failures where models struggle while searching for specific information within a vast context.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Taxonomy of AI Memory&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The analysis of AI memory architecture reveals the various components according to their temporal duration and functional purpose. All modern systems use a multi-tiered memory hierarchy that can balance real-time processing speed with the need for vast, durable storage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8u77en2a01loyfwjj860.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8u77en2a01loyfwjj860.png" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Working memory&lt;/strong&gt; is at the vanguard of this architecture. Its capacity is limited and critical for achieving coherence through raw token processing and immediate inference building. &lt;br&gt;
&lt;strong&gt;Short-term memory&lt;/strong&gt; is the next stage that strings together working memory. It builds and maintains context across a specific session through sliding windows or summarization techniques.&lt;br&gt;
&lt;strong&gt;Long-term memory&lt;/strong&gt; is the embodiment of continuity. It can be externalized into durable storage systems, acting as an unbounded index of knowledge.&lt;br&gt;
Interesting to note that long-term memory can encompass and go beyond &lt;strong&gt;procedural memory&lt;/strong&gt;, which is fixed within learned logic and inference.&lt;/p&gt;

&lt;p&gt;In the &lt;a href="https://dev.to/dc600/ai-has-a-memory-problem-decentralization-and-privacy-might-have-a-solution-part-2-3kpk"&gt;next part&lt;/a&gt; of the series, I will discuss at length the short-term and long-term AI memory, and also the security and privacy risks associated with AI memory architecture.&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>ai</category>
      <category>web3</category>
      <category>privacy</category>
    </item>
    <item>
      <title>Guide To Cross-Chain Key Generation (EVM / Base) With Oasis ROFL</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Fri, 20 Feb 2026 12:26:19 +0000</pubDate>
      <link>https://dev.to/dc600/guide-to-cross-chain-key-generation-evm-base-with-oasis-rofl-38c8</link>
      <guid>https://dev.to/dc600/guide-to-cross-chain-key-generation-evm-base-with-oasis-rofl-38c8</guid>
      <description>&lt;p&gt;Oasis introduced the framework for runtime off-chain logic (&lt;a href="https://oasis.net/decentralized-ai" rel="noopener noreferrer"&gt;ROFL&lt;/a&gt;) to help build and run apps off-chain while ensuring privacy and maintaining trust with on-chain verifiability. There are many moving parts to building with ROFL. &lt;br&gt;
In this tutorial, I will demonstrate how to build a tiny TypeScript app, &lt;strong&gt;generating a secp256k1 key inside ROFL&lt;/strong&gt;. It will be using the &lt;strong&gt;@oasisprotocol/rofl-client TypeScript SDK&lt;/strong&gt;, which talks to the &lt;strong&gt;&lt;a href="https://docs.oasis.io/build/rofl/features/appd/" rel="noopener noreferrer"&gt;appd REST API&lt;/a&gt;&lt;/strong&gt; under the hood. The TypeScript app will also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;derive an &lt;strong&gt;EVM address&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sign&lt;/strong&gt; messages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;deploy a contract&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;send&lt;/strong&gt; EIP-1559 transactions on &lt;strong&gt;Base Sepolia&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There will be a simple &lt;strong&gt;smoke test&lt;/strong&gt; that prints to logs.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Prerequisites&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To do the steps described in this guide, you will need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node.js 20+&lt;/strong&gt; and &lt;strong&gt;Docker&lt;/strong&gt; (or Podman)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Oasis CLI&lt;/strong&gt; and a minimum of 120 TEST tokens in your wallet (&lt;a href="https://faucet.testnet.oasis.io/" rel="noopener noreferrer"&gt;Oasis Testnet faucet&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Some Base Sepiola test ETH (&lt;a href="https://docs.base.org/base-chain/tools/network-faucets" rel="noopener noreferrer"&gt;Base Sepiola faucet&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the setup details, please refer to the documentation on &lt;a href="https://docs.oasis.io/build/tools/cli/setup" rel="noopener noreferrer"&gt;Quickstart Prerequisites&lt;/a&gt;. &lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Init App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The first step is to initialize a new app using the Oasis CLI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;oasis rofl init rofl-keygen
cd rofl-keygen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Create App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;At the time of creating the app on the Testnet, you will be required to deposit tokens. Assign 100 TEST tokens at this point.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;oasis rofl create --network testnet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As output, the CLI will produce the &lt;strong&gt;App ID&lt;/strong&gt;, denoted by rofl1.... &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Init a Hardhat (TypeScript) project&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now, you are ready to kickstart the project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx hardhat init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since we are showcasing a TypeScript app, &lt;strong&gt;choose TypeScript&lt;/strong&gt; when prompted, and then accept the defaults.&lt;br&gt;
Next step would be to add the small runtime deps for use outside of Hardhat.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i @oasisprotocol/rofl-client ethers dotenv @types/node
npm i -D tsx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hardhat’s TypeScript template automatically creates a &lt;strong&gt;tsconfig.json&lt;/strong&gt;. We need to add a small script so that the app code can compile to &lt;strong&gt;dist/&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// tsconfig.json
{
  "compilerOptions": {
    "rootDir": "./src",
    "outDir": "./dist"
  },
  "include": ["src"]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;App structure&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this section, we will add a few small TS files and one Solidity contract.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
├── appd.ts               # thin wrapper over @oasisprotocol/rofl-client
├── evm.ts                # ethers helpers (provider, wallet, tx, deploy)
├── keys.ts               # tiny helpers (checksum)
└── scripts/
    ├── deploy-contract.ts  # generic deploy script for compiled artifacts
    └── smoke-test.ts       # end-to-end demo (logs)
contracts/
└── Counter.sol           # sample contract
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;src/appd.ts&lt;/strong&gt; — thin wrapper over the SDK&lt;br&gt;
Here, you will need to use the official client to talk to &lt;strong&gt;appd&lt;/strong&gt; (UNIX socket). We will also need to keep an explicit &lt;strong&gt;local‑dev fallback&lt;/strong&gt; when running outside ROFL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {existsSync} from 'node:fs';
import {
  RoflClient,
  KeyKind,
  ROFL_SOCKET_PATH
} from '@oasisprotocol/rofl-client';

const client = new RoflClient(); // UDS: /run/rofl-appd.sock

export async function getAppId(): Promise&amp;lt;string&amp;gt; {
  return client.getAppId();
}

/**
 * Generates (or deterministically re-derives) a secp256k1 key inside ROFL and
 * returns it as a 0x-prefixed hex string (for ethers.js Wallet).
 *
 * Local development ONLY (outside ROFL): If the socket is missing and you set
 * ALLOW_LOCAL_DEV=true and LOCAL_DEV_SK=0x&amp;lt;64-hex&amp;gt;, that value is used.
 */
export async function getEvmSecretKey(keyId: string): Promise&amp;lt;string&amp;gt; {
  if (existsSync(ROFL_SOCKET_PATH)) {
    const hex = await client.generateKey(keyId, KeyKind.SECP256K1);
    return hex.startsWith('0x') ? hex : `0x${hex}`;
  }
  const allow = process.env.ALLOW_LOCAL_DEV === 'true';
  const pk = process.env.LOCAL_DEV_SK;
  if (allow &amp;amp;&amp;amp; pk &amp;amp;&amp;amp; /^0x[0-9a-fA-F]{64}$/.test(pk)) return pk;
  throw new Error(
    'rofl-appd socket not found and no LOCAL_DEV_SK provided (dev only).'
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;src/evm.ts&lt;/strong&gt; — ethers helpers&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {
  JsonRpcProvider,
  Wallet,
  parseEther,
  type TransactionReceipt,
  ContractFactory
} from "ethers";

export function makeProvider(rpcUrl: string, chainId: number) {
  return new JsonRpcProvider(rpcUrl, chainId);
}

export function connectWallet(
  skHex: string,
  rpcUrl: string,
  chainId: number
): Wallet {
  const w = new Wallet(skHex);
  return w.connect(makeProvider(rpcUrl, chainId));
}

export async function signPersonalMessage(wallet: Wallet, msg: string) {
  return wallet.signMessage(msg);
}

export async function sendEth(
  wallet: Wallet,
  to: string,
  amountEth: string
): Promise&amp;lt;TransactionReceipt&amp;gt; {
  const tx = await wallet.sendTransaction({
    to,
    value: parseEther(amountEth)
  });
  const receipt = await tx.wait();
  if (receipt == null) {
    throw new Error("Transaction dropped or replaced before confirmation");
  }
  return receipt;
}

export async function deployContract(
  wallet: Wallet,
  abi: any[],
  bytecode: string,
  args: unknown[] = []
): Promise&amp;lt;{ address: string; receipt: TransactionReceipt }&amp;gt; {
  const factory = new ContractFactory(abi, bytecode, wallet);
  const contract = await factory.deploy(...args);
  const deployTx = contract.deploymentTransaction();
  const receipt = await deployTx?.wait();
  await contract.waitForDeployment();
  if (!receipt) {
    throw new Error("Deployment TX not mined");
  }
  return { address: contract.target as string, receipt };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;src/keys.ts&lt;/strong&gt; — tiny helpers&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Wallet, getAddress } from "ethers";

export function secretKeyToWallet(skHex: string): Wallet {
  return new Wallet(skHex);
}

export function checksumAddress(addr: string): string {
  return getAddress(addr);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;src/scripts/smoke-test.ts&lt;/strong&gt; — single end‑to‑end flow&lt;br&gt;
This is an important step as this script has multiple functions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;print the App ID (inside ROFL), address, and a signed message&lt;/li&gt;
&lt;li&gt;waits for funding&lt;/li&gt;
&lt;li&gt;deploy the counter contract
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import "dotenv/config";
import { readFileSync } from "node:fs";
import { join } from "node:path";
import { getAppId, getEvmSecretKey } from "../appd.js";
import { secretKeyToWallet, checksumAddress } from "../keys.js";
import { makeProvider, signPersonalMessage, sendEth, deployContract } from "../evm.js";
import { formatEther, JsonRpcProvider } from "ethers";

const RPC_URL = process.env.BASE_RPC_URL ?? "https://sepolia.base.org";
const CHAIN_ID = Number(process.env.BASE_CHAIN_ID ?? "84532");
const KEY_ID = process.env.KEY_ID ?? "evm:base:sepolia";

function sleep(ms: number): Promise&amp;lt;void&amp;gt; {
  return new Promise((r) =&amp;gt; setTimeout(r, ms));
}

async function waitForFunding(
  provider: JsonRpcProvider,
  addr: string,
  minWei: bigint = 1n,
  timeoutMs = 15 * 60 * 1000,
  pollMs = 5_000
): Promise&amp;lt;bigint&amp;gt; {
  const start = Date.now();
  while (Date.now() - start &amp;lt; timeoutMs) {
    const bal = await provider.getBalance(addr);
    if (bal &amp;gt;= minWei) return bal;
    console.log(`Waiting for funding... current balance=${formatEther(bal)} ETH`);
    await sleep(pollMs);
  }
  throw new Error("Timed out waiting for funding.");
}

async function main() {
  const appId = await getAppId().catch(() =&amp;gt; null);
  console.log(`ROFL App ID: ${appId ?? "(unavailable outside ROFL)"}`);

  const sk = await getEvmSecretKey(KEY_ID);
  // NOTE: This demo trusts the configured RPC provider. For production, prefer a
  // light client (for example, Helios) so you can verify remote chain state.
  const wallet = secretKeyToWallet(sk).connect(makeProvider(RPC_URL, CHAIN_ID));
  const addr = checksumAddress(await wallet.getAddress());
  console.log(`EVM address (Base Sepolia): ${addr}`);

  const msg = "hello from rofl";
  const sig = await signPersonalMessage(wallet, msg);
  console.log(`Signed message: "${msg}"`);
  console.log(`Signature: ${sig}`);

  const provider = wallet.provider as JsonRpcProvider;

  let bal = await provider.getBalance(addr);
  if (bal === 0n) {
    console.log("Please fund the above address with Base Sepolia ETH to continue.");
    bal = await waitForFunding(provider, addr);
  }
  console.log(`Balance detected: ${formatEther(bal)} ETH`);

  const artifactPath = join(process.cwd(), "artifacts", "contracts", "Counter.sol", "Counter.json");
  const artifact = JSON.parse(readFileSync(artifactPath, "utf8"));
  if (!artifact?.abi || !artifact?.bytecode) {
    throw new Error("Counter artifact missing abi/bytecode");
  }
  const { address: contractAddress, receipt: deployRcpt } =
    await deployContract(wallet, artifact.abi, artifact.bytecode, []);
  console.log(`Deployed Counter at ${contractAddress} (tx=${deployRcpt.hash})`);

  console.log("Smoke test completed successfully!");
}

main().catch((e) =&amp;gt; {
  console.error(e);
  process.exit(1);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;contracts/Counter.sol&lt;/strong&gt; — minimal sample&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract Counter {
    uint256 private _value;
    event Incremented(uint256 v);
    event Set(uint256 v);

    function current() external view returns (uint256) { return _value; }
    function inc() external { unchecked { _value += 1; } emit Incremented(_value); }
    function set(uint256 v) external { _value = v; emit Set(v); }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;src/scripts/deploy-contract.ts&lt;/strong&gt; — generic deployer&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import "dotenv/config";
import { readFileSync } from "node:fs";
import { getEvmSecretKey } from "../appd.js";
import { secretKeyToWallet } from "../keys.js";
import { makeProvider, deployContract } from "../evm.js";

const KEY_ID = process.env.KEY_ID ?? "evm:base:sepolia";
const RPC_URL = process.env.BASE_RPC_URL ?? "https://sepolia.base.org";
const CHAIN_ID = Number(process.env.BASE_CHAIN_ID ?? "84532");

/**
 * Usage:
 *   npm run deploy-contract -- ./artifacts/MyContract.json '[arg0, arg1]'
 * The artifact must contain { abi, bytecode }.
 */
async function main() {
  const [artifactPath, ctorJson = "[]"] = process.argv.slice(2);
  if (!artifactPath) {
    console.error("Usage: npm run deploy-contract -- &amp;lt;artifact.json&amp;gt; '[constructorArgsJson]'");
    process.exit(2);
  }

  const artifactRaw = readFileSync(artifactPath, "utf8");
  const artifact = JSON.parse(artifactRaw);
  const { abi, bytecode } = artifact ?? {};
  if (!abi || !bytecode) {
    throw new Error("Artifact must contain { abi, bytecode }");
  }

  let args: unknown[];
  try {
    args = JSON.parse(ctorJson);
    if (!Array.isArray(args)) throw new Error("constructor args must be a JSON array");
  } catch (e) {
    throw new Error(`Failed to parse constructor args JSON: ${String(e)}`);
  }

  const sk = await getEvmSecretKey(KEY_ID);
  // NOTE: This demo trusts the configured RPC provider. For production, prefer a
  // light client (for example, Helios) so you can verify remote chain state.
  const wallet = secretKeyToWallet(sk).connect(makeProvider(RPC_URL, CHAIN_ID));
  const { address, receipt } = await deployContract(wallet, abi, bytecode, args);

  console.log(JSON.stringify({ contractAddress: address, txHash: receipt.hash, status: receipt.status }, null, 2));
}

main().catch((e) =&amp;gt; {
  console.error(e);
  process.exit(1);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Hardhat (contracts only)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;At this stage, we will need minimal config to compile &lt;strong&gt;Counter.sol&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;hardhat.config.ts&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import type { HardhatUserConfig } from "hardhat/config";

const config: HardhatUserConfig = {
  solidity: {
    version: "0.8.24",
    settings: {
      optimizer: { enabled: true, runs: 200 }
    }
  },
  paths: {
    sources: "./contracts",
    artifacts: "./artifacts",
    cache: "./cache"
  }
};

export default config;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Point to note is that local compilation is optional, so you can skip it if you want. Next step is a choice - either delete the existing &lt;strong&gt;contracts/Lock.sol&lt;/strong&gt; file or you can update it to Solidity &lt;strong&gt;version 0.8.24&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx hardhat compile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Containerize&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is an essential step. Here, you need to a Dockerfile that builds TS and compiles the contract. The file will also run the &lt;strong&gt;smoke test&lt;/strong&gt; once, and then stand idle while you inspect logs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dockerfile&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM node:20-alpine
WORKDIR /app

COPY package.json package-lock.json* ./
RUN npm ci

COPY tsconfig.json ./
COPY src ./src
COPY contracts ./contracts
COPY hardhat.config.ts ./
RUN npm run build &amp;amp;&amp;amp; npx hardhat compile &amp;amp;&amp;amp; npm prune --omit=dev

ENV NODE_ENV=production
CMD ["sh", "-c", "node dist/scripts/smoke-test.js || true; tail -f /dev/null"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, you must mount &lt;strong&gt;appd socket&lt;/strong&gt; provided by ROFL. Rest assured that no public ports are exposed in the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;compose.yaml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  demo:
    image: docker.io/YOURUSER/rofl-keygen:0.1.0
    platform: linux/amd64
    environment:
      - KEY_ID=${KEY_ID:-evm:base:sepolia}
      - BASE_RPC_URL=${BASE_RPC_URL:-https://sepolia.base.org}
      - BASE_CHAIN_ID=${BASE_CHAIN_ID:-84532}
    volumes:
      - /run/rofl-appd.sock:/run/rofl-appd.sock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Build the image&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It is important to remember that ROFL only runs on Intel TDX-enabled hardware. So, if you're compiling images on a different host, such as macOS, then passing the &lt;strong&gt;--platform linux/amd64&lt;/strong&gt; parameter is an essential extra step.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker buildx build --platform linux/amd64 \
  -t docker.io/YOURUSER/rofl-keygen:0.1.0 --push .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An interesting point to note here is that you can opt for extra security and verifiability. You just need to pin the digest and use &lt;strong&gt;image: ...&lt;a class="mentioned-user" href="https://dev.to/sha256"&gt;@sha256&lt;/a&gt;:...&lt;/strong&gt; in &lt;strong&gt;compose.yaml&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Build ROFL bundle&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There is a step that you must take before running the &lt;strong&gt;oasis rofl build&lt;/strong&gt; command. Since building the image segment comes after containerization, you will need to update the &lt;strong&gt;services.demo.image&lt;/strong&gt; in &lt;strong&gt;compose.yaml&lt;/strong&gt; to the image you built.&lt;br&gt;
For simple TypeScript projects, like this one, there is sometimes a possibility that the image size is larger than anticipated. It is thus advisable to update the &lt;strong&gt;rofl.yaml&lt;/strong&gt; &lt;strong&gt;resources&lt;/strong&gt; section to at least: &lt;strong&gt;memory: 1024&lt;/strong&gt; and &lt;strong&gt;storage.size: 4096&lt;/strong&gt;.&lt;br&gt;
Now, you are ready.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;oasis rofl build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can next publish the enclave identities and config.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;oasis rofl update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Deploy&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is an easy enough step where you deploy to a Testnet provider.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;oasis rofl deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;End‑to‑end (Base Sepolia)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is a 2-step process, although the second step is optional.&lt;br&gt;
First, you view smoke‑test logs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;oasis rofl machine logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you have completed all the steps till now correctly, you will see in the output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App ID&lt;/li&gt;
&lt;li&gt;EVM address and a signed message&lt;/li&gt;
&lt;li&gt;A prompt to fund the address&lt;/li&gt;
&lt;li&gt;Once funding is done, a Counter.sol deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next, local dev. Here, you need to run &lt;strong&gt;npm run build:all&lt;/strong&gt; command to compile the TypeScript code and the Solidity contract. Skip this step if not needed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; export ALLOW_LOCAL_DEV=true
 export LOCAL_DEV_SK=0x&amp;lt;64-hex-dev-secret-key&amp;gt;   # DO NOT USE IN PROD
 npm run smoke-test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Security &amp;amp; notes to remember&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Provider logs are not encrypted at rest. So, **never **log secret keys.&lt;/li&gt;
&lt;li&gt;The appd socket &lt;strong&gt;/run/rofl-appd.sock&lt;/strong&gt; exists &lt;strong&gt;only inside ROFL&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;There may be rate limits in public RPCs. So, it is advisable to opt for a dedicated Base RPC URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a key generation demo in the Oasis GitHub, which you can refer to as an example of this tutorial. &lt;a href="https://github.com/oasisprotocol/demo-rofl-keygen" rel="noopener noreferrer"&gt;https://github.com/oasisprotocol/demo-rofl-keygen&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that you have successfully generated a key in ROFL with &lt;strong&gt;appd&lt;/strong&gt;, signed messages, deployed a contract, and moved ETH on Base Sepolia, let us know in the comments section your feedback. For a quick chat with the Oasis engineering team for help with specific issues, you can drop your comments in the &lt;strong&gt;dev-central channel&lt;/strong&gt; in the official &lt;a href="https://discord.com/invite/BQCxwhT5wS" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>web3</category>
      <category>solidity</category>
      <category>devex</category>
    </item>
    <item>
      <title>Developing in Web3: Deploying Privacy-First dApps with Sapphire + ROFL</title>
      <dc:creator>DC</dc:creator>
      <pubDate>Tue, 20 Jan 2026 06:28:08 +0000</pubDate>
      <link>https://dev.to/dc600/developing-in-web3-deploying-privacy-first-dapps-with-sapphire-rofl-aof</link>
      <guid>https://dev.to/dc600/developing-in-web3-deploying-privacy-first-dapps-with-sapphire-rofl-aof</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sapphire provides confidential EVM smart contracts. OPL lets existing dApps add privacy without migrating chains.&lt;/li&gt;
&lt;li&gt;ROFL enables verifiable, privacy-preserving off-chain computation.&lt;/li&gt;
&lt;li&gt;Together, Sapphire + ROFL form a full stack for building private, AI-ready web3 applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The crypto landscape today is flooded with web3 and AI dApps (decentralized applications). You need to choose the right chain and the right tools to develop and deploy your dApp, as it can make all the difference in attracting the right attention from the end-users. The choices are too many, and they often distract more than add value. It is also hard to come by solid, reliable information to make a decision.&lt;/p&gt;

&lt;p&gt;I believe in Oasis as a pioneer of smart privacy for web3 and AI. Let me tell you point by point why I became a believer.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Tech Stack: Sapphire EVM&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In the blockchain trilemma scene, privacy has always taken the backseat, as most protocols emphasize decentralization and scalability. And then there is the debate and confusion of how to frame the rising privacy narrative - is it privacy coin or privacy blockchain?&lt;/p&gt;

&lt;p&gt;Oasis has emerged as a pioneer in the field of smart privacy. It is a modular L1 blockchain that aims to finally complete the blockchain picture - decentralization, scalability, and privacy (and security) together.&lt;/p&gt;

&lt;p&gt;Privacy-preserving techniques have garnered much attention in recent times. Long before zero-knowledge proofs (ZKPs), fully homomorphic encryption (FHE), and secure multiparty computation (sMPC) became trending, Oasis had adopted trusted execution environments (&lt;a href="https://oasis.net/security-and-tees" rel="noopener noreferrer"&gt;TEEs&lt;/a&gt;) for end-to-end encryption and confidential computation.&lt;/p&gt;

&lt;p&gt;In Oasis &lt;a href="https://oasis.net/sapphire" rel="noopener noreferrer"&gt;Sapphire&lt;/a&gt;, you get the world's first and only production-ready confidential EVM. Its key features help you build better dApps that are privacy-first.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EVM compatibility&lt;/li&gt;
&lt;li&gt;Private storage&lt;/li&gt;
&lt;li&gt;Encryption precompiles&lt;/li&gt;
&lt;li&gt;Free view calls&lt;/li&gt;
&lt;li&gt;Web2 authentication&lt;/li&gt;
&lt;li&gt;ROFL (runtime off-chain logic)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, as a web3 developer, you get to work with smart privacy, cross-chain simplicity, and low technical overhead. How it differs from most other projects also offering privacy solutions is that you get the best of both worlds here - transparent when you need it, confidentiality when it matters. Further, you can build with full spectrum of confidentiality customization - 100% public to 100% private or anywhere in between.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.oasis.io/dapp/sapphire/" rel="noopener noreferrer"&gt;Build with docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/oasisprotocol/sapphire-paratime" rel="noopener noreferrer"&gt;Repository research&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=c_N8edT41-Q" rel="noopener noreferrer"&gt;Sapphire 101 video tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Deployed already? Use the OPL hack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But what happens if you have already built your dApp on another EVM chain? It is unfeasible to dismantle everything there and start rebuilding from scratch for the sake of privacy. Acknowledging this dilemma, Oasis offers the services of the Oasis Privacy Layer (&lt;a href="https://oasis.net/opl" rel="noopener noreferrer"&gt;OPL&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;OPL is simple to use - a few hundred lines of code, practically a plug-and-play solution. Behind the scenes, it uses a message passing bridge and a gas relayer.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbn4gvzshqlcvnaa42r1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbn4gvzshqlcvnaa42r1n.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It gives the flexibility to leverage Sapphire's features and functionalities for your dApp right from your home network, paying transaction fees with your chain's native token. What you assuredly get from this setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customizable privacy&lt;/li&gt;
&lt;li&gt;Cross-chain convenience&lt;/li&gt;
&lt;li&gt;Productive transparency&lt;/li&gt;
&lt;li&gt;Low complexity&lt;/li&gt;
&lt;li&gt;Access to cryptographic primitives&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learn more about OPL's technical advantage and utility &lt;a href="https://oasis.net/blog/opl-features-uses-explainer" rel="noopener noreferrer"&gt;here&lt;/a&gt;, and &lt;a href="https://docs.oasis.io/dapp/opl/" rel="noopener noreferrer"&gt;start building&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Framework: ROFL&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now, Sapphire is the runtime on-chain logic, but computation-heavy dApps, with end-to-end encryption and/or powered by AI, are a huge challenge. When you add the criteria that the privacy you get and the computations you process should be verifiable and trustless, the feasibility of doing everything on-chain plummets.&lt;/p&gt;

&lt;p&gt;The challenges mount when dealing with cryptoAI, as it has two main problems - crypto's limited application layer and AI's trust issues. Off-chain computation is a viable answer in this situation. Oasis has thus developed the &lt;a href="https://oasis.net/decentralized-ai" rel="noopener noreferrer"&gt;ROFL&lt;/a&gt; framework, essentially working like a decentralized TEE cloud with on-chain privacy and verifiability.&lt;/p&gt;

&lt;p&gt;ROFL's 5-part architecture involves a hardware layer, an application layer, a remote attestation layer, a blockchain layer, and a user interaction layer. Key features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uncapped computational power&lt;/li&gt;
&lt;li&gt;Tamper-proof processing&lt;/li&gt;
&lt;li&gt;Verifiable execution&lt;/li&gt;
&lt;li&gt;Decentralized key management solution&lt;/li&gt;
&lt;li&gt;Direct access to confidential virtual machines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reason ROFL is so crucial and pivotal to the next-gen private and trustless web3 and AI dApps can be simply summed up by what it doesn't need, which you will definitely appreciate.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No chain dependency&lt;/li&gt;
&lt;li&gt;No coding language dependency&lt;/li&gt;
&lt;li&gt;No prior TEE experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6uu06g4ui5mdzktn6q3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6uu06g4ui5mdzktn6q3g.png" alt=" " width="680" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Start exploring the scope of ROFL with these resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rofl.app/" rel="noopener noreferrer"&gt;Build with templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.oasis.io/build/rofl/" rel="noopener noreferrer"&gt;Build with CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Real-World Integrations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The applicability of the Sapphire + ROFL solution, with its impact and scope, is limitless. The features and primitives that ROFL unlocks are also significant.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://oasis.net/blog/decentralized-key-management-agents" rel="noopener noreferrer"&gt;decentralized key management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://oasis.net/blog/multichain-wallet-agents" rel="noopener noreferrer"&gt;multi-chain wallet control&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://oasis.net/blog/rofl-proxy-frontend-hosting" rel="noopener noreferrer"&gt;frontend hosting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://oasis.net/blog/erc-8004-trustless-agents" rel="noopener noreferrer"&gt;value add-on for ERC-8004&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://oasis.net/blog/x402-https-internet-native-payments" rel="noopener noreferrer"&gt;value add-on for x402&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Already, multiple live collaborations have transpired.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zeph&lt;/strong&gt; - developing AI companions empowered by DeAI and DeCC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tamarin&lt;/strong&gt; - empowering secure and private cross-border healthcare data analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tradable&lt;/strong&gt; - trading with privacy-preserving AI insights&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flashback&lt;/strong&gt; - privacy-first AI training that lets users own and monetize their data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plurality&lt;/strong&gt; - confidential reputation scoring and AI context flow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Talos&lt;/strong&gt; - combining DAO 2.0 and DeFAI in the form of a new model for on-chain sovereign intelligence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;zkAGI&lt;/strong&gt; - building PawPad, a privacy-preserving platform for trustless trading agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heurist&lt;/strong&gt; - enabling privacy-first MCP servers for AI agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Huralya&lt;/strong&gt; - building private AI wellness assistants&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Carrotfunding&lt;/strong&gt; - servicing on-chain prop trading, introducing a new model for parallel verification of the risk and evaluation engine&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://oasisrose.garden/lessons/sovereign-intelligence-the-rise-of-ai-owned-autonomous-protocols/" rel="noopener noreferrer"&gt;Talos&lt;/a&gt; and &lt;a href="https://oasisrose.garden/lessons/verifiable-on-chain-prop-trading/" rel="noopener noreferrer"&gt;Carrotfunding&lt;/a&gt; here deserve special focus, standing out as pathbreaking case studies redefining DeFi.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final words&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The takeaway from all this is that what Oasis offers to blockchain and web3 developers is not just some concept - it's something real and tangible. &lt;br&gt;
In a space where half-baked or well-intentioned ideas sound promising but often don't deliver in their execution, a working blueprint for next-gen dApp builders stands out.&lt;/p&gt;

&lt;p&gt;So, if you want to deploy your dApp in a web3 universe where privacy, scalability, trustlessness, and AI-ready performance all matter equally, take a moment to explore Oasis - and help shape what comes next.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>web3</category>
      <category>verifiablecomputation</category>
      <category>verifiableprivacy</category>
    </item>
  </channel>
</rss>
