<?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>Forem: Russell Oje</title>
    <description>The latest articles on Forem by Russell Oje (@russell_oje).</description>
    <link>https://forem.com/russell_oje</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%2F3846695%2F5f9b12d1-01cf-4a2a-ab89-b52838094707.jpg</url>
      <title>Forem: Russell Oje</title>
      <link>https://forem.com/russell_oje</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/russell_oje"/>
    <language>en</language>
    <item>
      <title>Day 16 of #100DaysOfSolana</title>
      <dc:creator>Russell Oje</dc:creator>
      <pubDate>Tue, 05 May 2026 23:14:06 +0000</pubDate>
      <link>https://forem.com/russell_oje/day-16-of-100daysofsolana-3554</link>
      <guid>https://forem.com/russell_oje/day-16-of-100daysofsolana-3554</guid>
      <description>&lt;p&gt;I just made a transfer to a new Solana account in less than a second.&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%2F1u9vrxc68ci2sptn8twv.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%2F1u9vrxc68ci2sptn8twv.png" alt="Terminal Image" width="800" height="166"&gt;&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%2Fmv0n6ii4xamali4pqzl6.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%2Fmv0n6ii4xamali4pqzl6.png" alt="Explorer Image" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
    </item>
    <item>
      <title>Week2 Recap of #100DaysOfSolana</title>
      <dc:creator>Russell Oje</dc:creator>
      <pubDate>Mon, 04 May 2026 14:14:04 +0000</pubDate>
      <link>https://forem.com/russell_oje/week2-recap-of-100daysofsolana-4ml</link>
      <guid>https://forem.com/russell_oje/week2-recap-of-100daysofsolana-4ml</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsm0ub9hm3w9yl5b3i0hf.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%2Fsm0ub9hm3w9yl5b3i0hf.png" alt="My Solana Account" width="800" height="135"&gt;&lt;/a&gt;&lt;br&gt;
This week I queried on-chain data, built a dashboard, and mapped traditional databases to Solana's account model. The biggest shift: I don't need a backend. The RPC is the API. The ledger is the database. Wallets are auth. Same address, different networks, same architecture. It finally made sense. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;#100DaysOfSolana&lt;/code&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>web3</category>
    </item>
    <item>
      <title>Week2 of #100DaysOfSolana: The Account Model</title>
      <dc:creator>Russell Oje</dc:creator>
      <pubDate>Mon, 04 May 2026 14:11:03 +0000</pubDate>
      <link>https://forem.com/russell_oje/week2-of-100daysofsolana-the-account-model-2af5</link>
      <guid>https://forem.com/russell_oje/week2-of-100daysofsolana-the-account-model-2af5</guid>
      <description>&lt;p&gt;By the end of Week 1, I understood identity on Solana. This week was about understanding &lt;em&gt;state&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In traditional Web2 development, I was trained to think in two separate layers: code lives on a server, data lives in a database. They talk to each other through the database queries and middleware. It felt natural because I built that way for years. But Solana doesn't work that way, and this week it finally made sense why.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Week 2 Journey: From RPC Queries to Account Architecture&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Day 8: "Read your first on-chain data"&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I wrote a simple script that connected to devnet's RPC and queried a balance. It felt like calling a REST API, just pointing at a different kind of backend.&lt;/p&gt;

&lt;p&gt;The key moment: I realized I wasn't querying a database. I was asking the Solana network for the state of an &lt;em&gt;account&lt;/em&gt;. That account is not a row in a table somewhere. It's a first-class entity on the ledger itself.&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%2Fs5lpz4x12efgovdfin6w.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%2Fs5lpz4x12efgovdfin6w.png" alt="Day 8" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Day 9: "Fetch transactions"&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Next, I pulled transaction history for an address. Seeing block times, signatures, and slot numbers make me realize: every state change is a transaction, and every transaction is immutable history on-chain.&lt;/p&gt;

&lt;p&gt;For the first time, I understood audit logs at the protocol level. There's no way to delete a transaction. No way to "update" the past. If a balance changed, that change is forever stored on-chain, visible to everyone.&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%2Fugkbira1lb684ilmspvs.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%2Fugkbira1lb684ilmspvs.png" alt="Day 9" width="800" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Day 10: "Build a dashboard"&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Similar to Day 4 of Week1, I also built a browser app, but this one displays account data. Nothing fancy, just RPC calls in the frontend, rendered on the page.&lt;/p&gt;

&lt;p&gt;What clicked: the dashboard talks directly to the network. No backend API needed. No session management. The wallet in the browser is the auth. The RPC endpoint is the database. This is genuinely different.&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%2F8f3pv8y9d7syi4te594l.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%2F8f3pv8y9d7syi4te594l.png" alt="Day 10" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Day 11: "Compare accounts vs databases"&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;On this day, I mapped Web2 database concepts to Solana accounts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rows → Accounts&lt;/li&gt;
&lt;li&gt;Tables → A flat space of accounts identified by public key&lt;/li&gt;
&lt;li&gt;Auto-increment IDs → Base58 public keys&lt;/li&gt;
&lt;li&gt;Middleware auth → Program ownership rules&lt;/li&gt;
&lt;li&gt;Storage costs → Rent-exempt deposits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seeing the comparison table made it real. The account model isn't just a different API. It's a fundamentally different way to think about data architecture. And like I leaned here, in web3, there's no "join" operation because you organize data differently from the start. You fetch accounts by address, not by filtering queries. And you pay explicitly for storage, which makes you think carefully about what you store.&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%2F4ejy6t0jxr9xlwy3n5hj.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%2F4ejy6t0jxr9xlwy3n5hj.png" alt="Day 11" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Day 12: "Compare networks"&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Finally, I queried the same address on both devnet and mainnet. Different balances, different transaction histories, same address model.&lt;/p&gt;

&lt;p&gt;The insight: the architecture is identical, but the state is independent. Devnet is a sandbox. Mainnet is production. Both follow the same rules. I could deploy the same program to both and it would work. Same address derivation, same account queries, different network validators securing different state.&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%2Fhnyzkr48hes8u6hbxu3x.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%2Fhnyzkr48hes8u6hbxu3x.png" alt="Day 12" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Surprised Me&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The biggest surprise was realizing I could build a complete on-chain app without writing a backend. In Web2, "no backend" means leaning on a third-party service (Firebase, Supabase, etc.). On Solana, "no backend" means the network &lt;em&gt;is&lt;/em&gt; the backend. The RPC is the API. The ledger is the database. Wallets handle identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What's Still Confusing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;PDAs (Program Derived Addresses) and how they relate to accounts. I saw them mentioned but haven't built with them yet. The concept of accounts owned by programs, and how programs use PDAs to derive deterministic addresses.&lt;/p&gt;

&lt;p&gt;Also, the economics of rent. I understand the concept, but I haven't felt the weight of deploying a large program or managing multiple accounts yet. When do rent costs become a serious consideration? When do I need to optimize?&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Solana Accounts vs Web2 Databases</title>
      <dc:creator>Russell Oje</dc:creator>
      <pubDate>Fri, 01 May 2026 09:43:27 +0000</pubDate>
      <link>https://forem.com/russell_oje/solana-accounts-vs-web2-databases-12a9</link>
      <guid>https://forem.com/russell_oje/solana-accounts-vs-web2-databases-12a9</guid>
      <description>&lt;p&gt;&lt;em&gt;"Unlike when you are used to building full-stack applications; a Next.js frontend, connected to a Laravel backend, and modeling state in MySQL or PostgreSQL; moving to Solana requires rewiring how you think about data."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I've been exploring blockchain development with Solana, and the biggest hurdle initially is the phrase: &lt;em&gt;"Everything is an account."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;solana account $(solana address)&lt;/code&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%2F5c257tzk01t805tj86bb.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%2F5c257tzk01t805tj86bb.png" alt="Solana Account" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The output of the CLI command above maps out exactly how traditional Web2 database concepts translate to the Solana runtime. &lt;/p&gt;

&lt;p&gt;Here is the side-by-side comparison I put together:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Web2 vs. Solana comparison table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concept&lt;/th&gt;
&lt;th&gt;Web2&lt;/th&gt;
&lt;th&gt;Solana&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MySQL/PostgreSQL rows or MongoDB docs&lt;/td&gt;
&lt;td&gt;A "flat" byte array in an Account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Logic vs. State&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Your Laravel/Node code is the logic; the DB is the state&lt;/td&gt;
&lt;td&gt;Both are Accounts; logic is just an account with &lt;code&gt;executable: true&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary Keys&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Auto-increment IDs or UUIDs (e.g., &lt;code&gt;user_id: 101&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Base58 Public Keys (32 bytes) or PDAs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Security/Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Middleware checks (e.g., &lt;code&gt;$request-&amp;gt;user()&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;The Runtime checks: only the "Owner" program can write&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Filtering/Joins&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SELECT * FROM table WHERE...&lt;/code&gt; (Server-side)&lt;/td&gt;
&lt;td&gt;No Joins. You fetch the account by address or filter off-chain via RPC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AWS/DigitalOcean monthly bills&lt;/td&gt;
&lt;td&gt;"Rent": A lamport deposit you get back when you &lt;code&gt;close()&lt;/code&gt; the account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;CI/CD pushes code to a server&lt;/td&gt;
&lt;td&gt;Deploying a Program creates an account owned by the BPF Loader&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The Biggest Takeaway
&lt;/h3&gt;

&lt;p&gt;In a traditional setup, you deploy your code to a server, and that code orchestrates database transactions. On Solana, both your application logic (programs) and your user data live as accounts in the exact same global space. &lt;/p&gt;

&lt;p&gt;There are no native queries, no joins, and no backend middleware guarding your tables. You pay upfront for the bytes you store via rent, and the runtime itself physically blocks unauthorized writes. Your database instincts around data modeling still matter, but the architectural execution is completely flipped. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;#100DaysOfSolana&lt;/code&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Week1 Recap of #100DaysOfSolana</title>
      <dc:creator>Russell Oje</dc:creator>
      <pubDate>Mon, 27 Apr 2026 09:49:04 +0000</pubDate>
      <link>https://forem.com/russell_oje/week1-recap-of-100daysofsolana-2ei4</link>
      <guid>https://forem.com/russell_oje/week1-recap-of-100daysofsolana-2ei4</guid>
      <description>&lt;p&gt;This week I generated my first Solana keypair, persisted it, and connected a browser wallet to read my devnet balance in a small app. What surprised me most was realizing my identity is not a username in someone’s database; it is a keypair I control. &lt;/p&gt;

&lt;p&gt;Next I hope to turn this into real on-chain interactions and ship something people can use. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;#100DaysOfSolana&lt;/code&gt;&lt;/p&gt;

</description>
      <category>solana</category>
      <category>100daysofsolana</category>
    </item>
    <item>
      <title>Week1 of #100DaysOfSolana</title>
      <dc:creator>Russell Oje</dc:creator>
      <pubDate>Mon, 27 Apr 2026 09:37:29 +0000</pubDate>
      <link>https://forem.com/russell_oje/week1-of-100daysofsolana-5bb5</link>
      <guid>https://forem.com/russell_oje/week1-of-100daysofsolana-5bb5</guid>
      <description>&lt;p&gt;On Day 1 of this challenge, I thought I was doing something small: generate a wallet, print an address, move on.&lt;/p&gt;

&lt;p&gt;I ran a script, got a fresh keypair, and saw a long string appear in my terminal. It looked random and slightly intimidating, but also familiar in the same way SSH keys feel familiar. In Web2, I have dozens of identities: GitHub username, work email, banking login, social accounts. Every system has its own account model, its own password reset flow, and its own lockout rules.&lt;/p&gt;

&lt;p&gt;Solana felt different immediately. That one keypair was not just an account for one app. It was the beginning of identity across an entire network.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;## The Week 1 Journey&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;### Day 1: "Here is your wallet"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first script generated a keypair and printed the public key. The idea seemed simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Public key = safe to share&lt;/li&gt;
&lt;li&gt;Private key = proof of ownership&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%2Fk7r5tjh3h0r7af9gpce7.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%2Fk7r5tjh3h0r7af9gpce7.png" alt="Day1" width="800" height="161"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this stage, it still felt like setup boilerplate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;### Day 2: "Make it persistent"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then I built a script that loads an existing wallet from &lt;code&gt;wallet.json&lt;/code&gt; or creates one if missing. That changed the feeling.&lt;/p&gt;

&lt;p&gt;In Web2, identity is often a row in a database controlled by a platform. In this script, identity became something I could hold, persist, and re-use without asking anyone for permission. I also started to understand responsibility: if I lose this private key, there is no "Forgot Password" link.&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%2Fjkd1z9qcbzyt4b0lo3mf.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%2Fjkd1z9qcbzyt4b0lo3mf.png" alt="Day2" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;### Day 3: SOL vs lamports&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I set up the CLI wallet and looked at balances both in SOL and in lamports. One SOL equals one billion lamports. Seeing balances in the smallest unit made Solana feel less abstract. It reminded me of cents in payments systems, except enforced by protocol rules instead of application code conventions.&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%2F2octe2pomn156uxeto7y.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%2F2octe2pomn156uxeto7y.png" alt="Day3" width="800" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;### Day 4: Browser wallet connection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was the turning point. I built a Vite page, discovered installed wallets with Wallet Standard, connected Phantom, and fetched balance from RPC.&lt;/p&gt;

&lt;p&gt;In Web2 terms, this is what stood out: the app did not "create" my identity. The wallet presented an account, and the app read state from the network. The identity lived outside the app. If I switch apps, I keep the same on-chain identity because it is tied to my keypair, not that product's user table.&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%2Fef42gq2cobmxxvgwgs1n.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%2Fef42gq2cobmxxvgwgs1n.png" alt="Day4" width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;### Day 5: Compare wallet types&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After trying CLI, browser, and mobile wallets, I saw a practical tradeoff:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI:&lt;/strong&gt; Fastest for scripts; least secure (plaintext file).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser:&lt;/strong&gt; Best for dApps; medium security (password/encryption).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile:&lt;/strong&gt; Best for personal use; highest hot-wallet security (biometrics).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Different interfaces, same underlying identity model.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
