<?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: Bitan Biswas</title>
    <description>The latest articles on DEV Community by Bitan Biswas (@bitan_biswas).</description>
    <link>https://dev.to/bitan_biswas</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%2F2084687%2F23fecb49-6d3b-45a8-9158-74d6e73bba58.jpg</url>
      <title>DEV Community: Bitan Biswas</title>
      <link>https://dev.to/bitan_biswas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bitan_biswas"/>
    <language>en</language>
    <item>
      <title>From Keypairs to Identity: My First 4 Days Learning Solana as a Web2 Dev</title>
      <dc:creator>Bitan Biswas</dc:creator>
      <pubDate>Mon, 27 Apr 2026 08:51:59 +0000</pubDate>
      <link>https://dev.to/bitan_biswas/from-keypairs-to-identity-my-first-4-days-learning-solana-as-a-web2-dev-4o27</link>
      <guid>https://dev.to/bitan_biswas/from-keypairs-to-identity-my-first-4-days-learning-solana-as-a-web2-dev-4o27</guid>
      <description>&lt;p&gt;When I started the &lt;strong&gt;#100DaysOfSolana&lt;/strong&gt; challenge, I expected to learn tools and APIs. What I didn’t expect was how quickly my understanding of &lt;strong&gt;identity&lt;/strong&gt; would change.&lt;/p&gt;

&lt;p&gt;In Web2, identity = usernames + passwords stored by companies.&lt;br&gt;
On Solana, identity = a &lt;strong&gt;cryptographic keypair&lt;/strong&gt; that &lt;em&gt;you own&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This post breaks that down with real code and what I built in my first 4 days.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 Identity = Keypair (The Core Idea)
&lt;/h2&gt;

&lt;p&gt;Every Solana identity is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Public Key&lt;/strong&gt; → your address (shareable)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private Key&lt;/strong&gt; → your authority (must be protected)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’ve used SSH, it’s the same model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;id_rsa.pub&lt;/code&gt; → public&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;id_rsa&lt;/code&gt; → private&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Solana works the same way—but the &lt;strong&gt;entire blockchain verifies you&lt;/strong&gt;, not just one server.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Day 1: Creating My Identity (CLI Wallet)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;solana-keygen new
solana address
solana balance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a keypair stored at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~/.config/solana/id.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Insight:&lt;br&gt;
My entire identity is just a &lt;strong&gt;file on disk&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  💸 Day 2: First Transaction (Ownership in Action)
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;solana airdrop 1
solana transfer &amp;lt;RECIPIENT_ADDRESS&amp;gt; 0.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;👉 What’s happening under the hood:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transaction is &lt;strong&gt;signed with my private key&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Network verifies using my &lt;strong&gt;public key&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  ⚙️ Day 3: Parsing a Transaction (Programmatic Identity)
&lt;/h2&gt;

&lt;p&gt;I built a script using @solana/kit:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createSolanaRpc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;devnet&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@solana/kit&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;LAMPORTS_PER_SOL&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;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rpc&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;wallet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YOUR_PUBLIC_KEY&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;signatures&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;getSignaturesForAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;})&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;signature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;signatures&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;signature&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;tx&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;getTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;encoding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;jsonParsed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;maxSupportedTransactionVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;})&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="k"&gt;for &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;ix&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;program&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;ix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;transfer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&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;sender&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;source&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;receiver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&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;amount&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;ix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;info&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="nx"&gt;LAMPORTS_PER_SOL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;receiver&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;amount&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Insight:&lt;br&gt;
Everything boils down to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accounts (public keys)&lt;/li&gt;
&lt;li&gt;Signatures (proof of ownership)&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🔐 Day 4: Wallets = UX Layer Over Identity
&lt;/h2&gt;

&lt;p&gt;I explored:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLI wallet&lt;/li&gt;
&lt;li&gt;Browser wallet&lt;/li&gt;
&lt;li&gt;Mobile wallet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All use the same keypair—but differ in &lt;strong&gt;how they protect it&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  🦊 Phantom Wallet Use Case (Real dApp Flow)
&lt;/h2&gt;

&lt;p&gt;Here’s where it clicks.&lt;/p&gt;

&lt;p&gt;Using a browser wallet like Phantom, you don’t create accounts—you &lt;strong&gt;connect your identity&lt;/strong&gt;.&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="c1"&gt;// Connect Phantom Wallet&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;solana&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;isPhantom&lt;/span&gt;&lt;span class="p"&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;response&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;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Public Key:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;publicKey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 This gives you the same public key as your identity.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✍️ Signing a Transaction (User Approval)
&lt;/h3&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;transaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Transaction&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;SystemProgram&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transfer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;fromPubkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;publicKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;toPubkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RECEIVER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;lamports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&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;signedTx&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;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;signTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Key difference from CLI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phantom shows a &lt;strong&gt;popup&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;User must approve before signing&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💡 Why This Matters
&lt;/h3&gt;

&lt;p&gt;In Web2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App controls your identity&lt;/li&gt;
&lt;li&gt;You log in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Web3:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You control your identity&lt;/li&gt;
&lt;li&gt;Apps request permission&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Public Keys vs Usernames
&lt;/h2&gt;

&lt;p&gt;Example Solana address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;14grJpemFaf88c8tiVb77W7TYg2W3ir6pfkKz3YjhhZ5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unlike usernames:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not owned by a company&lt;/li&gt;
&lt;li&gt;Works across all apps&lt;/li&gt;
&lt;li&gt;Cannot be taken away&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚖️ Tradeoffs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&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;Password reset&lt;/td&gt;
&lt;td&gt;No recovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platform-controlled&lt;/td&gt;
&lt;td&gt;Self-owned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Easy UX&lt;/td&gt;
&lt;td&gt;Responsibility&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Lose your private key → lose everything.&lt;/p&gt;




&lt;h2&gt;
  
  
  💻 My Repo
&lt;/h2&gt;

&lt;p&gt;I’ve been documenting everything here:&lt;br&gt;
👉 &lt;a href="https://github.com/bitanb1999/100-days-of-solana" rel="noopener noreferrer"&gt;https://github.com/bitanb1999/100-days-of-solana&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Final Take
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Identity in Web3 isn’t something you sign up for.&lt;br&gt;
It’s something you generate and carry everywhere.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Public key → who you are&lt;/li&gt;
&lt;li&gt;Private key → what you control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else builds on that.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>From Usernames to Keypairs: Understanding Identity on Solana</title>
      <dc:creator>Bitan Biswas</dc:creator>
      <pubDate>Mon, 27 Apr 2026 08:38:43 +0000</pubDate>
      <link>https://dev.to/bitan_biswas/from-usernames-to-keypairs-understanding-identity-on-solana-51p1</link>
      <guid>https://dev.to/bitan_biswas/from-usernames-to-keypairs-understanding-identity-on-solana-51p1</guid>
      <description>&lt;p&gt;If you’ve spent your career in Web2, “identity” probably means a combination of usernames, emails, and passwords stored across different services. Your GitHub account, your company login, your banking app—each one represents a separate identity, controlled by the platform that provides it.&lt;/p&gt;

&lt;p&gt;On Solana, identity works very differently.&lt;/p&gt;

&lt;p&gt;Instead of accounts tied to platforms, your identity starts with a &lt;strong&gt;cryptographic keypair&lt;/strong&gt;. That single concept replaces usernames, passwords, and even authentication systems as we know them.&lt;/p&gt;

&lt;p&gt;Let’s break that down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identity in Web2 vs Web3
&lt;/h2&gt;

&lt;p&gt;In Web2, your identity is fragmented. You might log into a server using SSH keys, sign into apps with Google OAuth, and use passwords with 2FA elsewhere. Each system is owned and managed by a company. If they lock your account, your identity in that system is gone.&lt;/p&gt;

&lt;p&gt;On Solana, identity is unified and self-owned.&lt;/p&gt;

&lt;p&gt;When you generate a keypair, you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;public key&lt;/strong&gt; → your address (like a username)&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;private key&lt;/strong&gt; → your proof of ownership (like a password, but stronger)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But here’s the key difference:&lt;br&gt;
No company stores or controls this identity. The network itself recognizes it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The SSH Analogy (That Makes It Click)
&lt;/h2&gt;

&lt;p&gt;If you’ve used SSH, this will feel familiar.&lt;/p&gt;

&lt;p&gt;You generate a keypair locally.&lt;br&gt;
You add your public key to a server.&lt;br&gt;
When connecting, you prove ownership by signing with your private key.&lt;/p&gt;

&lt;p&gt;Solana works the same way—except instead of a single server, the &lt;strong&gt;entire blockchain is the verifier&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Your public key is your identity everywhere on the network. Every transaction you make is signed with your private key, proving that you are the owner of that identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Public Keys vs Usernames
&lt;/h2&gt;

&lt;p&gt;A Solana address might look like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;14grJpemFaf88c8tiVb77W7TYg2W3ir6pfkKz3YjhhZ5&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It’s a Base58-encoded public key. Unlike usernames:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It’s globally unique&lt;/li&gt;
&lt;li&gt;It doesn’t depend on a platform&lt;/li&gt;
&lt;li&gt;No one can “take it away” from you&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Web2, your username exists in a database controlled by a company.&lt;br&gt;
On Solana, your public key exists independently of any application.&lt;/p&gt;

&lt;p&gt;Any dApp can recognise your identity without needing to create a new account for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ownership Without Permission
&lt;/h2&gt;

&lt;p&gt;This is where things get powerful.&lt;/p&gt;

&lt;p&gt;In Web2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You “own” your account because a company lets you&lt;/li&gt;
&lt;li&gt;Password resets exist because someone else manages your credentials&lt;/li&gt;
&lt;li&gt;Access can be revoked&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On Solana:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only the holder of the private key can sign transactions&lt;/li&gt;
&lt;li&gt;There is no admin panel&lt;/li&gt;
&lt;li&gt;There is no password reset&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you control the private key, you control the identity. Full stop.&lt;/p&gt;

&lt;p&gt;This is called &lt;strong&gt;self-custody&lt;/strong&gt;, and it shifts responsibility from platforms to users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identity as a Foundation
&lt;/h2&gt;

&lt;p&gt;On-chain identity is not just about logging in—it’s the foundation for everything else.&lt;/p&gt;

&lt;p&gt;Your keypair is used to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Own tokens (SOL, NFTs)&lt;/li&gt;
&lt;li&gt;Interact with programs (smart contracts)&lt;/li&gt;
&lt;li&gt;Vote in governance systems&lt;/li&gt;
&lt;li&gt;Build reputation across applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because it’s cryptographic and portable, your identity works across all apps on Solana without needing separate sign-ups.&lt;/p&gt;

&lt;p&gt;You don’t “create an account” for each app.&lt;br&gt;
You &lt;strong&gt;bring your identity with you&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tradeoff
&lt;/h2&gt;

&lt;p&gt;Of course, this model comes with tradeoffs.&lt;/p&gt;

&lt;p&gt;In Web2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can reset your password&lt;/li&gt;
&lt;li&gt;Support teams can help recover accounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On Solana:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lose your private key → lose access permanently&lt;/li&gt;
&lt;li&gt;No central authority to recover it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s why wallets (CLI, browser, mobile, hardware) exist—they provide different balances between &lt;strong&gt;security and convenience&lt;/strong&gt;, while still managing the same underlying keypair.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The biggest mindset shift is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On Solana, identity is not something a platform gives you—it’s something you own.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your public key is your global identity.&lt;br&gt;
Your private key is your authority.&lt;/p&gt;

&lt;p&gt;Everything you do on-chain flows from that.&lt;/p&gt;

&lt;p&gt;For a Web2 developer, this might feel unfamiliar at first. But once it clicks, it becomes clear: this model removes intermediaries and creates a system where identity is &lt;strong&gt;portable, permissionless, and entirely yours&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that’s a fundamental change in how we think about the internet.&lt;/p&gt;

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