<?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: Gopichand</title>
    <description>The latest articles on DEV Community by Gopichand (@gopichand_dev).</description>
    <link>https://dev.to/gopichand_dev</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%2F3882708%2F5d2325f7-46e0-4bd0-a0a5-2d36935df10a.jpg</url>
      <title>DEV Community: Gopichand</title>
      <link>https://dev.to/gopichand_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gopichand_dev"/>
    <language>en</language>
    <item>
      <title>Solana Transactions Explained for Backend Developers (With Real Failures)</title>
      <dc:creator>Gopichand</dc:creator>
      <pubDate>Sat, 09 May 2026 11:00:56 +0000</pubDate>
      <link>https://dev.to/gopichand_dev/solana-transactions-explained-for-backend-developers-with-real-failures-2ido</link>
      <guid>https://dev.to/gopichand_dev/solana-transactions-explained-for-backend-developers-with-real-failures-2ido</guid>
      <description>&lt;p&gt;I've been building on Solana for the past few weeks as part of the &lt;/p&gt;

&lt;h1&gt;
  
  
  100DaysOfSolana challenge by MLH. Days 15–19 were all about transactions —
&lt;/h1&gt;

&lt;p&gt;sending them, reading them, tracking them through confirmation stages, and &lt;br&gt;
deliberately breaking them. Here's what I learned, explained for backend &lt;br&gt;
developers who think in HTTP requests and database calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Solana Transaction Is Not an API Call
&lt;/h2&gt;

&lt;p&gt;When you hit a REST endpoint, you send a request and get a response. &lt;br&gt;
If it fails, you retry. No cost, no permanent record, no cryptographic proof &lt;br&gt;
it ever happened.&lt;/p&gt;

&lt;p&gt;A Solana transaction is different in every one of those ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It requires a &lt;strong&gt;cryptographic signature&lt;/strong&gt; from the fee payer's private key&lt;/li&gt;
&lt;li&gt;It is &lt;strong&gt;permanently recorded on-chain&lt;/strong&gt; whether it succeeds or fails&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;expires&lt;/strong&gt; after ~60–90 seconds based on a recent blockhash&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;costs a fee even if it fails&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point surprised me the most. Let me show you with real output.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Anatomy of a Transaction
&lt;/h2&gt;

&lt;p&gt;Every Solana transaction has these parts:&lt;br&gt;
Signature 0: 2xQrSQU...&lt;br&gt;
Account 0: srw- AWKYsCGB... (fee payer)&lt;br&gt;
Account 1: -rw- 8nwngJPM...&lt;br&gt;
Account 2: -r-x 11111111... (System Program)&lt;br&gt;
Instruction 0&lt;br&gt;
Program: 11111111... (System Program)&lt;br&gt;
Transfer { lamports: 9999000000000 }&lt;br&gt;
Recent Blockhash: FVSnvFfG...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Signature&lt;/strong&gt; — cryptographic proof the fee payer authorized this tx&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accounts&lt;/strong&gt; — every account the tx will read or write must be declared upfront&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instructions&lt;/strong&gt; — the actual operations (transfer SOL, call a program, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recent Blockhash&lt;/strong&gt; — acts like a timestamp + nonce; tx expires if too old&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The account permission flags (&lt;code&gt;srw-&lt;/code&gt;, &lt;code&gt;-rw-&lt;/code&gt;, &lt;code&gt;-r-x&lt;/code&gt;) tell you exactly what &lt;br&gt;
each account can do: &lt;strong&gt;s&lt;/strong&gt;igner, &lt;strong&gt;r&lt;/strong&gt;eadable, &lt;strong&gt;w&lt;/strong&gt;ritable, e*&lt;em&gt;x&lt;/em&gt;*ecutable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solana's 3 Confirmation Levels
&lt;/h2&gt;

&lt;p&gt;Unlike a database commit that's either done or not, Solana confirmation &lt;br&gt;
happens in stages:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;th&gt;Web2 analogy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Processed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Validator included tx in a block&lt;/td&gt;
&lt;td&gt;POST reached the server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Confirmed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;66%+ validators voted on the block&lt;/td&gt;
&lt;td&gt;200 OK from load-balanced API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Finalized&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;31+ blocks built on top&lt;/td&gt;
&lt;td&gt;DB commit flushed + replicated&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I built a live tracker that shows each stage in real time:&lt;br&gt;
Tracking confirmation stages...&lt;br&gt;
[Processed → Confirmed] ✅ reached in 0.3s&lt;br&gt;
[Confirmed → Finalized] ✅ reached in 0.2s&lt;/p&gt;

&lt;p&gt;Transaction successful! 🎉&lt;br&gt;
Signature: 3hYmkD3m...&lt;br&gt;&lt;br&gt;
On devnet, Processed→Confirmed takes ~400ms. Confirmed→Finalized takes &lt;br&gt;
~6–12 seconds. In production those numbers matter for UX decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens When Transactions Fail
&lt;/h2&gt;

&lt;p&gt;This is where things get interesting. I deliberately triggered a failed &lt;br&gt;
transaction by skipping preflight simulation (&lt;code&gt;skipPreflight: true&lt;/code&gt;) and &lt;br&gt;
attempting to send 9,999 SOL when my wallet only had ~6.14 SOL.&lt;/p&gt;

&lt;p&gt;Here's the real on-chain output from &lt;code&gt;solana confirm -v&lt;/code&gt;:&lt;br&gt;
Status: Error processing Instruction 0: custom program error: 0x1&lt;br&gt;
Fee: ◎0.000005&lt;br&gt;
Account 0 balance: ◎6.13593 -&amp;gt; ◎6.135925&lt;br&gt;
Account 1 balance: ◎0&lt;br&gt;
Compute Units Consumed: 150&lt;br&gt;
Log Messages:&lt;br&gt;
Program 11111111111111111111111111111111 invoke&lt;br&gt;
Transfer: insufficient lamports 6135925000, need 9999000000000&lt;br&gt;
Program 11111111111111111111111111111111 failed: custom program error: 0x1&lt;br&gt;&lt;br&gt;
Three things stand out:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The fee was charged anyway.&lt;/strong&gt;&lt;br&gt;
Account 0 balance dropped by 0.000005 SOL — just the fee, not the transfer. &lt;br&gt;
The network did work (verified signature, attempted execution), so it got paid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The error is structured.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;custom program error: 0x1&lt;/code&gt; from the System Program always means insufficient &lt;br&gt;
lamports. As you write your own programs, these error codes become your &lt;br&gt;
primary debugging tool — like HTTP status codes but for on-chain logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The Log Messages are your stack trace.&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Transfer: insufficient lamports 6135925000, need 9999000000000&lt;/code&gt; tells you &lt;br&gt;
exactly what was available vs what was needed. This is how you debug failed &lt;br&gt;
instructions in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Types of Failure: Local vs On-Chain
&lt;/h2&gt;

&lt;p&gt;Not all failures reach the chain:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Failure type&lt;/th&gt;
&lt;th&gt;Where it stops&lt;/th&gt;
&lt;th&gt;Fee charged?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CLI preflight (insufficient funds check)&lt;/td&gt;
&lt;td&gt;Never leaves your machine&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;On-chain failure (skipPreflight)&lt;/td&gt;
&lt;td&gt;Executed by validators&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is why production apps use &lt;code&gt;simulateTransaction&lt;/code&gt; before submitting. &lt;br&gt;
Simulation catches errors locally for free. Every on-chain failure is real &lt;br&gt;
money, even if it's tiny amounts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mental Model Shift
&lt;/h2&gt;

&lt;p&gt;The biggest shift from Web2 to Solana transactions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web2:&lt;/strong&gt; You send a request. The server decides what happens. You get a &lt;br&gt;
response. If something breaks server-side, you don't pay for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solana:&lt;/strong&gt; You sign and broadcast a state change. Validators execute it &lt;br&gt;
atomically. The result — success or failure — is permanent and public. &lt;br&gt;
You pay regardless.&lt;/p&gt;

&lt;p&gt;The blockhash expiry (~60–90s) also changes how you think about retries. &lt;br&gt;
You can't just retry the same signed transaction forever — the blockhash &lt;br&gt;
goes stale. You need to rebuild and re-sign with a fresh blockhash.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built This Week
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Day 15&lt;/strong&gt; — Inspected transaction anatomy: signatures, accounts, 
instructions, compute units&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 16&lt;/strong&gt; — Sent first SOL transfer on devnet (&amp;lt;1s settlement)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 17&lt;/strong&gt; — Built a reusable Node.js CLI transfer tool with balance 
checks and Explorer links&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 18&lt;/strong&gt; — Added live confirmation tracking (Processed→Confirmed→Finalized)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 19&lt;/strong&gt; — Deliberately broke transactions, read on-chain errors with 
&lt;code&gt;solana confirm -v&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All code is on my GitHub: &lt;br&gt;
&lt;a href="https://github.com/gopichandchalla16/100-days-of-solana" rel="noopener noreferrer"&gt;github.com/gopichandchalla16/100-days-of-solana&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you're coming from a Web2 background and starting with Solana, the &lt;br&gt;
transaction model will feel strange at first. The fee-on-failure behavior, &lt;br&gt;
the blockhash expiry, and the upfront account declaration all exist for &lt;br&gt;
good reasons — they're what makes Solana fast, parallel, and predictable. &lt;br&gt;
Once it clicks, it's actually elegant.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Day 20 of #100DaysOfSolana — building in public every day 🚀&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Follow my progress: &lt;a href="https://twitter.com/GopichandAI" rel="noopener noreferrer"&gt;@GopichandAI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>learning</category>
    </item>
    <item>
      <title>Week 2 on Solana: When the "Public Database" Finally Clicked</title>
      <dc:creator>Gopichand</dc:creator>
      <pubDate>Mon, 04 May 2026 07:55:21 +0000</pubDate>
      <link>https://dev.to/gopichand_dev/week-2-on-solana-when-the-public-database-finally-clicked-273a</link>
      <guid>https://dev.to/gopichand_dev/week-2-on-solana-when-the-public-database-finally-clicked-273a</guid>
      <description>&lt;p&gt;I'm doing the 100 Days of Solana challenge by MLH, and Week 2 just changed how I think about blockchain data entirely.&lt;/p&gt;

&lt;p&gt;Week 1 was about identity — generating keypairs, understanding wallets, getting devnet SOL. That part felt familiar, like setting up a dev environment.&lt;/p&gt;

&lt;p&gt;Week 2 was different. Week 2 was about &lt;em&gt;reading the chain&lt;/em&gt; — and that's where the mental model shift actually happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I expected vs what I got
&lt;/h2&gt;

&lt;p&gt;I expected reading blockchain data to feel like calling a mysterious, slow, complex API. Something with heavy setup, authentication tokens, and confusing docs.&lt;/p&gt;

&lt;p&gt;What I got was this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;lamports&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBalance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lamports&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;_000_000_000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No API key. No login. No permissions. Anyone can call this for any address, anytime.&lt;/p&gt;

&lt;p&gt;In Web2, if I want someone's account balance, I need DB credentials, role permissions, and middleware. On Solana, I just ask. Publicly. That's not a flaw — that's the design.&lt;/p&gt;

&lt;h2&gt;
  
  
  The moment it clicked
&lt;/h2&gt;

&lt;p&gt;Day 11 was a conceptual challenge: compare Solana accounts to Web2 databases. I ran:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;solana account &lt;span class="si"&gt;$(&lt;/span&gt;solana address&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
Public Key: AWKYsCGBcfGLSz6QpmXzRn7EJ9fRhiJsjYSLDV3c9L9y&lt;br&gt;
Balance: 2.5 SOL&lt;br&gt;
Owner: 11111111111111111111111111111111&lt;br&gt;
Executable: false&lt;br&gt;&lt;br&gt;
Then I ran:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;solana account TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
Owner: BPFLoaderUpgradeab1e11111111111111111111111&lt;br&gt;
Executable: true&lt;br&gt;
Length: 36 bytes&lt;br&gt;&lt;br&gt;
Same command. Same account model. One is a wallet holding SOL. The other is the Token Program — compiled code that manages every SPL token on Solana. Both are just "accounts."&lt;/p&gt;

&lt;p&gt;That's when "everything is an account" stopped being a slogan and started being a mental model.&lt;/p&gt;
&lt;h2&gt;
  
  
  The devnet vs mainnet surprise
&lt;/h2&gt;

&lt;p&gt;Day 12 was the most satisfying. One script. Two RPC connections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;devnetRpc&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createSolanaRpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;devnet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.devnet.solana.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mainnetRpc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createSolanaRpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;mainnet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.mainnet-beta.solana.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same address. Same &lt;code&gt;getBalance&lt;/code&gt; call. Completely different output:&lt;br&gt;
DEVNET → 0.001159846 SOL | Slot: 459,981,397&lt;br&gt;
MAINNET → 0.069875097 SOL | Slot: 417,486,413&lt;br&gt;&lt;br&gt;
Different balances. Different slots. Completely different transaction histories. I already knew they were separate — but &lt;em&gt;seeing&lt;/em&gt; it side by side in the terminal made it real in a way docs never did.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's still confusing
&lt;/h2&gt;

&lt;p&gt;PDAs — Program Derived Addresses. I understand they're derived from a program + seed with no private key, so only the program can sign for them. But I haven't &lt;em&gt;used&lt;/em&gt; one yet. I can describe them but I can't feel them. That's my Week 3 target.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd tell Week-1-me
&lt;/h2&gt;

&lt;p&gt;Stop thinking in tables and rows. Start thinking in accounts and owners. Every piece of state on Solana is an account. Every account has an owner program. Only that program can modify it. That's not a restriction — that's what makes the system trustless.&lt;/p&gt;

&lt;p&gt;Also: devnet is your playground. Break things there first.&lt;/p&gt;




&lt;p&gt;If you're also doing #100DaysOfSolana, drop your DEV.to link below — I want to read what clicked for you.&lt;/p&gt;

&lt;p&gt;→ My code: &lt;a href="https://github.com/gopichandchalla16/100-days-of-solana" rel="noopener noreferrer"&gt;https://github.com/gopichandchalla16/100-days-of-solana&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Your Public Key IS Your Identity: What Web2 Devs Need to Know About Solana</title>
      <dc:creator>Gopichand</dc:creator>
      <pubDate>Tue, 28 Apr 2026 16:55:00 +0000</pubDate>
      <link>https://dev.to/gopichand_dev/your-public-key-is-your-identity-what-web2-devs-need-to-know-about-solana-4lpm</link>
      <guid>https://dev.to/gopichand_dev/your-public-key-is-your-identity-what-web2-devs-need-to-know-about-solana-4lpm</guid>
      <description>&lt;p&gt;If you've been a Web2 developer for any amount of time, you know what identity &lt;br&gt;
looks like: a username in a database, an email address, a session cookie, &lt;br&gt;
maybe an OAuth token from Google. Your "identity" is really just a record that &lt;br&gt;
some company controls. They can delete it. They can lock you out. They can sell &lt;br&gt;
the data. You don't own it — you just borrow it.&lt;/p&gt;

&lt;p&gt;Solana works completely differently. And once you understand how, you can't &lt;br&gt;
unsee it.&lt;/p&gt;
&lt;h2&gt;
  
  
  It Starts with a Keypair
&lt;/h2&gt;

&lt;p&gt;When I started the 100 Days of Solana challenge, the first thing I did was run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;solana-keygen new &lt;span class="nt"&gt;--no-bip39-passphrase&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; wallet.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generated two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;public key&lt;/strong&gt; — a 32-byte Ed25519 address like &lt;code&gt;AWKYsCGBcfGLSz6QpmXzRn7EJ9fRhiJsjYSLDV3c9L9y&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;private key&lt;/strong&gt; — stored in &lt;code&gt;wallet.json&lt;/code&gt;, never shared&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. That keypair IS my identity on Solana. No signup form. No email &lt;br&gt;
verification. No "username already taken."&lt;/p&gt;
&lt;h2&gt;
  
  
  The SSH Key Analogy
&lt;/h2&gt;

&lt;p&gt;If you've ever set up a server on AWS or DigitalOcean, you already understand &lt;br&gt;
this model. You generate an SSH keypair, paste the public key into the server's &lt;br&gt;
&lt;code&gt;authorized_keys&lt;/code&gt; file, and prove your identity by holding the private key.&lt;/p&gt;

&lt;p&gt;Solana works identically — except instead of one server, it's the entire &lt;br&gt;
global network. Every node on Solana knows your public key. You prove ownership &lt;br&gt;
by signing transactions with your private key.&lt;/p&gt;

&lt;p&gt;The difference from Web2 is critical: &lt;strong&gt;no company stores your credentials&lt;/strong&gt;. &lt;br&gt;
There is no database row. There is no admin who can reset your password or &lt;br&gt;
lock your account.&lt;/p&gt;
&lt;h2&gt;
  
  
  What a Solana Address Actually Is
&lt;/h2&gt;

&lt;p&gt;A Solana address is a Base58-encoded 32-byte Ed25519 public key. Base58 was &lt;br&gt;
chosen deliberately — it removes visually confusing characters like &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;O&lt;/code&gt;, &lt;br&gt;
&lt;code&gt;I&lt;/code&gt;, and &lt;code&gt;l&lt;/code&gt; to prevent copy-paste mistakes.&lt;/p&gt;

&lt;p&gt;In Web2, your username lives in someone's Postgres table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'gopichand'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Solana, your identity is derived from math. It exists everywhere and nowhere &lt;br&gt;
simultaneously — it only becomes real when you sign something with the private key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cryptographic Ownership vs Company-Granted Access
&lt;/h2&gt;

&lt;p&gt;Here's the most important mental shift:&lt;/p&gt;

&lt;p&gt;In Web2, you "own" your account because a company says you do. Twitter can &lt;br&gt;
ban you. Your bank can freeze your account. Google can lock your Gmail. You &lt;br&gt;
have access because they allow it.&lt;/p&gt;

&lt;p&gt;On Solana, ownership is cryptographic. If you hold the private key, you control &lt;br&gt;
the account — period. No appeal process, no customer support ticket, no &lt;br&gt;
waiting for a human to review your case.&lt;/p&gt;

&lt;p&gt;This is both powerful and terrifying. Lose your private key? Your funds are gone &lt;br&gt;
forever. No recovery email. That's why seed phrases and hardware wallets exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identity Enables Everything Else
&lt;/h2&gt;

&lt;p&gt;Once I had a keypair, I could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Receive devnet SOL&lt;/strong&gt; — just by sharing my public key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect a browser wallet&lt;/strong&gt; — Phantom connected on Day 4 without me ever 
sharing my private key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sign transactions&lt;/strong&gt; — prove I authorized a transfer without revealing 
my secret&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Own tokens and NFTs&lt;/strong&gt; — because ownership is just a signed record on-chain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This one keypair is the foundation for token ownership, dApp interactions, &lt;br&gt;
governance votes, and on-chain reputation — across every application on the &lt;br&gt;
network, without asking anyone's permission.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Wallet Type Should You Use?
&lt;/h2&gt;

&lt;p&gt;During Day 5 of the challenge, I compared three wallet types:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Wallet&lt;/th&gt;
&lt;th&gt;Key Storage&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CLI (&lt;code&gt;id.json&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Plaintext file&lt;/td&gt;
&lt;td&gt;Devnet scripting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser (Phantom)&lt;/td&gt;
&lt;td&gt;Encrypted + password&lt;/td&gt;
&lt;td&gt;dApp interactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile (Phantom)&lt;/td&gt;
&lt;td&gt;Hardware-backed + biometrics&lt;/td&gt;
&lt;td&gt;Personal daily use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware (Ledger)&lt;/td&gt;
&lt;td&gt;Never leaves device&lt;/td&gt;
&lt;td&gt;Long-term storage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The underlying keypair concept is identical across all of them. What differs &lt;br&gt;
is where the private key lives and how it's protected.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Big Takeaway
&lt;/h2&gt;

&lt;p&gt;In Web2, identity is a database record owned by someone else.&lt;br&gt;
In Web3, identity is a mathematical keypair owned by you.&lt;/p&gt;

&lt;p&gt;Your public key is your username, your account number, and your proof of &lt;br&gt;
existence on the network — all at once. The private key is the only password &lt;br&gt;
that matters, and only you should ever hold it.&lt;/p&gt;

&lt;p&gt;I'm documenting every step of this journey publicly as part of the &lt;br&gt;
&lt;a href="https://www.mlh.com/events/100-days-of-solana/challenges" rel="noopener noreferrer"&gt;100 Days of Solana&lt;/a&gt; &lt;br&gt;
challenge by MLH.&lt;/p&gt;

&lt;p&gt;All my code is on GitHub: &lt;a href="https://github.com/gopichandchalla16/100-days-of-solana" rel="noopener noreferrer"&gt;github.com/gopichandchalla16/100-days-of-solana&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow along if you're on the same journey! 🚀&lt;/p&gt;

&lt;h1&gt;
  
  
  100daysofsolana #solana #web3 #blockchain #beginners
&lt;/h1&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Starting 100 Days of Solana as an AI Web3 Builder.</title>
      <dc:creator>Gopichand</dc:creator>
      <pubDate>Sat, 18 Apr 2026 05:39:28 +0000</pubDate>
      <link>https://dev.to/gopichand_dev/starting-100-days-of-solana-as-an-ai-x-web3-builder-3p8l</link>
      <guid>https://dev.to/gopichand_dev/starting-100-days-of-solana-as-an-ai-x-web3-builder-3p8l</guid>
      <description>&lt;p&gt;Hi DEV community 👋&lt;br&gt;
I’m Gopichand, a CSE graduate from India, and I’m building in public around AI × Web3.&lt;br&gt;
I’ve recently joined the 100 Days of Solana challenge, and I want to use this journey to learn Solana step by step, share what I build, and connect with other developers who are exploring web3.&lt;/p&gt;

&lt;p&gt;My goal is simple: learn by doing, document the process, and turn each small win into a real project.&lt;br&gt;
I’ll be sharing updates, experiments, and lessons as I go.&lt;/p&gt;

&lt;p&gt;Excited to be here — and I’d love to hear from anyone else learning Solana or building on chain.                                              &lt;/p&gt;


&lt;h3&gt;
  
  
  Follow my progress:
&lt;/h3&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://github.com/gopichandchalla16" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F162360009%3Fv%3D4%3Fs%3D400" height="460" class="m-0" width="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://github.com/gopichandchalla16" rel="noopener noreferrer" class="c-link"&gt;
            gopichandchalla16 (Gopichand) · GitHub
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            AI × Web3 builder | LangChain · Solidity · On-chain agents | Building in public daily → @GopichandAI - gopichandchalla16
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.githubassets.com%2Ffavicons%2Ffavicon.svg" width="32" height="32"&gt;
          github.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://x.com/GopichandAI" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;x.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>web3</category>
      <category>solana</category>
      <category>ai</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
