<?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: Denil Bhatt</title>
    <description>The latest articles on Forem by Denil Bhatt (@denilbhatt).</description>
    <link>https://forem.com/denilbhatt</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%2F1321020%2Fdd32f7a3-cb91-4e35-9928-18f761c732ca.jpg</url>
      <title>Forem: Denil Bhatt</title>
      <link>https://forem.com/denilbhatt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/denilbhatt"/>
    <language>en</language>
    <item>
      <title>Solana Transactions Are a Distributed Job Processor (Not an API Call)</title>
      <dc:creator>Denil Bhatt</dc:creator>
      <pubDate>Tue, 12 May 2026 05:34:13 +0000</pubDate>
      <link>https://forem.com/denilbhatt/solana-transactions-are-a-distributed-job-processor-not-an-api-call-2pdp</link>
      <guid>https://forem.com/denilbhatt/solana-transactions-are-a-distributed-job-processor-not-an-api-call-2pdp</guid>
      <description>&lt;h2&gt;
  
  
  🤦‍♂️ The Mistake I Made On Day One
&lt;/h2&gt;

&lt;p&gt;I was just playing around with transactions on Solana last week, and thought of just trying to send a huge amount (500 SOL) to my friend's wallet 💸 — when I only had about 0.5 SOL with me. I for sure knew that the transaction should fail, but I was like — why not just try it out of curiosity. I made the transaction call, the transaction failed. I checked my balance, and it was now 0.499995. 🤯&lt;/p&gt;

&lt;p&gt;Huh — that was strange. If the transaction failed, how did my balance drop?&lt;/p&gt;

&lt;p&gt;That ◎0.000005 started an itch I had to scratch. 🕵️‍♂️ Coming from Ethereum and Polygon, I assumed I understood what a transaction was. Turns out I had the shape right, but the soul completely wrong. &lt;/p&gt;




&lt;h2&gt;
  
  
  🤔 First Instinct: "This Looks Like an HTTP Request"
&lt;/h2&gt;

&lt;p&gt;And honestly? It kinda does. When I started building transactions, the structure felt immediately familiar:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Web2 HTTP Request&lt;/th&gt;
&lt;th&gt;Solana Transaction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Headers&lt;/td&gt;
&lt;td&gt;Message Header&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth / Bearer Token&lt;/td&gt;
&lt;td&gt;Signature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Request Body&lt;/td&gt;
&lt;td&gt;Account Keys + Instructions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Request ID&lt;/td&gt;
&lt;td&gt;Transaction Signature&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That surface-level similarity is real — and it's also the thing that will trip you if you stop there.&lt;/p&gt;

&lt;p&gt;Because a Solana transaction is not a request. It's a &lt;strong&gt;job submission to a distributed processor.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Better Analogy: A Distributed Job Queue
&lt;/h2&gt;

&lt;p&gt;Here's how my Web2 brain eventually re-framed it:&lt;/p&gt;

&lt;p&gt;Imagine a job/task processor service. You want something done. So you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build a &lt;strong&gt;request payload&lt;/strong&gt; containing the job name, parameters, and an access token&lt;/li&gt;
&lt;li&gt;Submit it to the service&lt;/li&gt;
&lt;li&gt;Get back a &lt;strong&gt;jobId&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Poll the service for status: &lt;code&gt;queued → processing → success/failure&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The service persists the job metadata — payload, traces, logs, output — all of it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now put on your Web3 goggles and look at the same picture:&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;transactionMessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nf"&gt;createTransactionMessage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;version&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="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTransactionMessageFeePayerSigner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="c1"&gt;// 👇 your session token&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setTransactionMessageLifetimeUsingBlockhash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;latestBlockhash&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="nf"&gt;appendTransactionMessageInstruction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nf"&gt;getTransferSolInstruction&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="c1"&gt;// 👈 job name&lt;/span&gt;
        &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;signer&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="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;amountInLamports&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// 👈 job parameters&lt;/span&gt;
      &lt;span class="p"&gt;}),&lt;/span&gt;
      &lt;span class="nx"&gt;tx&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="nf"&gt;signTransactionMessageWithSigners&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;transactionMessage&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="nf"&gt;getSignatureFromTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signedTx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 👈 your jobId&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See &lt;code&gt;setTransactionMessageLifetimeUsingBlockhash&lt;/code&gt;? That's setting your &lt;strong&gt;session token&lt;/strong&gt; — a recent blockhash that acts exactly like a CSRF token with a validity window. It expires in ~60–90 seconds. If your transaction isn't processed in that window, it's dead. No retry, no extension.&lt;/p&gt;

&lt;p&gt;The mapping now looks like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Job Processor Concept&lt;/th&gt;
&lt;th&gt;Solana Equivalent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Job name / Task reference&lt;/td&gt;
&lt;td&gt;Instructions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Job parameters&lt;/td&gt;
&lt;td&gt;Account Keys&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Session token (CSRF)&lt;/td&gt;
&lt;td&gt;Recent Blockhash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access token / Checksum&lt;/td&gt;
&lt;td&gt;Signature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JobId&lt;/td&gt;
&lt;td&gt;Transaction Signature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Job status (queued → done)&lt;/td&gt;
&lt;td&gt;Commitment level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Persisted job metadata&lt;/td&gt;
&lt;td&gt;On-chain transaction record&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Submitting the job looks like 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="nx"&gt;wireTransaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getBase64EncodedWireTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signedTx&lt;/span&gt;&lt;span class="p"&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;sendTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wireTransaction&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;base64&lt;/span&gt;&lt;span class="dl"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You're handing the job off. And now you wait.&lt;/p&gt;




&lt;h2&gt;
  
  
  👀 Where the Analogy Gets Interesting: Peer Review
&lt;/h2&gt;

&lt;p&gt;In Web2, once the job processor says "done" — you trust it. That's it. Single source of truth.&lt;/p&gt;

&lt;p&gt;Solana does something different. And this is the part that genuinely changed how I think about decentralised systems.&lt;/p&gt;

&lt;p&gt;When a &lt;strong&gt;Leader Node&lt;/strong&gt; (think: the primary job processor) picks up your transaction and runs it, it packages it into a block — a batch of jobs — and broadcasts that block to the network. 🚚&lt;/p&gt;

&lt;p&gt;From here, the &lt;strong&gt;validators&lt;/strong&gt; (the peers) pick up that block, re-execute every transaction independently, and &lt;strong&gt;vote on whether the results are valid.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The commitment lifecycle goes like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;processed&lt;/code&gt; → Leader node ran it, block is broadcast&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;confirmed&lt;/code&gt; → 66%+ of validators have voted it valid ✅&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;finalized&lt;/code&gt; → 31+ more blocks have been built on top. It's permanent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's what that looks like in practice, straight from my devnet terminal:&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%2F4024lkb5fzdoa974k09s.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%2F4024lkb5fzdoa974k09s.png" alt="successful transaction" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Reading the output above:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Recent Blockhash&lt;/code&gt; → the CSRF-style session token, set at build time&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Signature 0&lt;/code&gt; → your jobId, returned the moment you submitted&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Instruction 0 / Transfer { lamports: 100000000 }&lt;/code&gt; → the job definition — what to run, with what parameters&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Fee: ◎0.000005&lt;/code&gt; → the cost of execution (we'll come back to this)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Finalized&lt;/code&gt; → peer review complete. It's on-chain. It's permanent.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;The interesting bit here is &lt;strong&gt;Peer Review&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In a Web2 environment, a malicious actor could potentially manipulate the response of a single job processor — intercept it, tamper with it, return a fake success. With Solana, to manipulate a result you'd need to corrupt &lt;strong&gt;66%+ of the entire validator network simultaneously.&lt;/strong&gt; That's not a bug fix, that's a coordinated attack at civilizational scale.&lt;/p&gt;

&lt;p&gt;That's why decentralisation isn't just a philosophy. It's a security model.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ The Part Nobody Warned Me About: Failure Isn't Free
&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%2F138wjp3sqh0gg70kg42d.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%2F138wjp3sqh0gg70kg42d.png" alt="failed transaction" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's have a look at this transaction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Transfer { lamports: 500000000000 }&lt;/code&gt; → just goofing around with 500 SOL&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Status: Error processing Instruction 0&lt;/code&gt; → states the failure&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Transfer: insufficient lamports&lt;/code&gt; → that's right, I didn't have enough balance&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Fee: ◎0.000005&lt;/code&gt; → wait what? — but you didn't make it through&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Transaction failed&lt;/code&gt; → ah you know that, still charging me?&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's what I wish someone had told me upfront:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The network fairly compensates every participant&lt;/strong&gt; — the Leader Node that ran your batch, the validators that peer-reviewed it. Everyone did work. Everyone gets paid. Whether your transaction succeeded or failed.&lt;/p&gt;

&lt;p&gt;That's not a gotcha. It's honest accounting. But it will catch you off guard the first time.&lt;/p&gt;

&lt;p&gt;Unlike me — don't make the mistake of assuming that failed transactions might be free.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 The Mental Model, In One Sentence
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Solana transactions are like HTTP requests in shape, but distributed job submissions in soul — with a session token that expires, a network of peer reviewers instead of a single server, and a fee structure that charges for effort, not outcome.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚀 What I'm Building Next
&lt;/h2&gt;

&lt;p&gt;Next week is all about diving deeper into the account model in Solana. Excited to make more mistakes and learn something with each fall.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is Day 20 of my MLH 100 Days of Solana challenge. I'm a Web2 backend developer exploring Solana purely out of curiosity — and apparently, stubbornness.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Code from this series: &lt;a href="https://github.com/denilbhatt0814/MLH-100-days-of-solana" rel="noopener noreferrer"&gt;github.com/denilbhatt0814/MLH-100-days-of-solana&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>web3</category>
      <category>solana</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>I've Been Building on Sand. Solana Builds on Bedrock.</title>
      <dc:creator>Denil Bhatt</dc:creator>
      <pubDate>Sun, 03 May 2026 11:07:47 +0000</pubDate>
      <link>https://forem.com/denilbhatt/ive-been-building-on-sand-solana-builds-on-bedrock-fa9</link>
      <guid>https://forem.com/denilbhatt/ive-been-building-on-sand-solana-builds-on-bedrock-fa9</guid>
      <description>&lt;p&gt;When I first read "everything in Solana is an account" — I had exactly three questions on my mind. 🤔&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What does "account" even mean here?&lt;/em&gt;&lt;br&gt;
&lt;em&gt;What does "everything" actually look like?&lt;/em&gt;&lt;br&gt;
&lt;em&gt;And... why?&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;If you, like me, come from a Web2 background and live with an assumption that data lives somewhere "magical" ✨ — some lowest layer under the world — you know the feeling. You deploy your backend, your database spins up, and data just... exists. It's not your primary concern. You're thinking about APIs, auth, maybe caching. Storage is already handled — a line item on your AWS bill, baked into your infra cost, invisible by design.&lt;/p&gt;

&lt;p&gt;Nobody told you to think about it first hand. So you didn't.&lt;/p&gt;




&lt;p&gt;But in Week 2, when I was learning about the fundamental unit of data storage, Solana said: &lt;strong&gt;everything is an account&lt;/strong&gt;. 🤨&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Holding&lt;/th&gt;
&lt;th&gt;Account Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Your wallet, SOL balance&lt;/td&gt;
&lt;td&gt;System Account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A specific token balance&lt;/td&gt;
&lt;td&gt;Token Account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployed executable code&lt;/td&gt;
&lt;td&gt;Program Account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Program state / stored data&lt;/td&gt;
&lt;td&gt;Data Account&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Same container, different purpose.&lt;/p&gt;

&lt;p&gt;After digesting this, if I had to condense "Account" in one line, I would say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;An account is a persistent data container that stores state, SOL balances, or program code — identified by a unique public key.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Now remember that magical place where Web2 data just exists?&lt;/p&gt;

&lt;p&gt;Solana looked me in the eyes and said — &lt;em&gt;"yeah, that's not how this works here."&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;On Solana, storage isn't free or permanent by default. The protocol enforces a &lt;strong&gt;Rent system&lt;/strong&gt; — a refundable deposit of SOL proportional to the bytes used. 💰&lt;/p&gt;

&lt;p&gt;When I heard &lt;em&gt;"accounts pay rent to stay alive on Solana"&lt;/em&gt;, my mind had two reactions at once:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💡 &lt;em&gt;"Wow, that's a smart way to value your infra and use it wisely."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;🤨 &lt;em&gt;"Monetizing the core component of any application? Brilliant business idea."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both reactions are still alive in me. I haven't resolved the tension. Maybe I don't need to yet.&lt;/p&gt;




&lt;p&gt;That's when it hit me. ✨&lt;/p&gt;

&lt;p&gt;In Web2, storage takes a back seat — not a concern until you're seriously hunting for optimization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solana treats it as a first class citizen. You think about it first, not last.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;But here's what's still floating for me: &lt;strong&gt;Transactions, Instructions, Programs&lt;/strong&gt;. I see these words everywhere in the docs. I know they matter. I just don't have the mental model yet — the same way I didn't have one for accounts two weeks ago.&lt;/p&gt;

&lt;p&gt;Week 3, I'm coming for you. 🫡&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of my #100DaysOfSolana journey with MLH. I'm documenting everything — the clicks, the confusion, and everything in between. Follow along if Web3 has been on your curiosity list.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🐦 &lt;a href="https://x.com/BhattDenil" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt; · 💻 &lt;a href="https://github.com/denilbhatt0814/MLH-100-days-of-solana" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; · 💼 &lt;a href="https://www.linkedin.com/in/denil-bhatt" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>solana</category>
      <category>web3</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Your Signature is Your Identity</title>
      <dc:creator>Denil Bhatt</dc:creator>
      <pubDate>Sun, 26 Apr 2026 10:57:25 +0000</pubDate>
      <link>https://forem.com/denilbhatt/your-signature-is-your-identity-5epa</link>
      <guid>https://forem.com/denilbhatt/your-signature-is-your-identity-5epa</guid>
      <description>&lt;p&gt;&lt;em&gt;Meri chabi, meri pehchan. My key, my identity. Sounds dramatic — until you realize it's literally how identity on Solana works.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Identity in Web2: The World You Know
&lt;/h2&gt;

&lt;p&gt;Say there is a new social media app rolled out this week, and you plan to be a part of it. When you hop on, the first thing you are asked for is to create an account — "your identity" on the platform. You enter a username, set up a password, and voila, you are all set.&lt;/p&gt;

&lt;p&gt;Next time you wish to access the platform, you use this combination and are allowed in. Now you can post a pic of your "Sunday Brunch" or share a clip of your "Bali Trip".&lt;/p&gt;

&lt;h2&gt;
  
  
  Identity on Solana: The Same, But Yours
&lt;/h2&gt;

&lt;p&gt;Identity on a blockchain network such as Solana works similarly, but uses cryptography to let you generate your own username and password — what we call a &lt;strong&gt;Public Key&lt;/strong&gt; and &lt;strong&gt;Private Key&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The public key, like a username or social media handle, acts as your identity on the Solana ecosystem, while your private key acts as the password — a proof of ownership of that identity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Forgot Password" Moment
&lt;/h2&gt;

&lt;p&gt;Now let's imagine you lost the password to this social media platform. What happens? You hit "Forgot Password?" The company sends you an email to reset it, and — you have your account back.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For a second, let's analyze what just happened. You lost the keys to your house, cried for help, and "Abracadabra" — someone handed you a key to access it. How? Wasn't it your own house? How could someone else hand you access? Did you actually own it?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is no "Forgot Password" on Solana. There is no Solana Inc. support team that will fly to your rescue. No one can let you back in. Because &lt;strong&gt;no one owns your identity except you.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay, But So What?
&lt;/h2&gt;

&lt;p&gt;At this point, you might be thinking — &lt;em&gt;"yaa yaa, I get the idea, identity, ownership, so what??"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here's what: your Solana identity — the keypair (public/private key) — works across every app on the network without asking anyone's permission. The tokens you hold, the votes you cast, the reputation you build — all of it is tied to one keypair that belongs entirely to you. No app can ban your keypair out of existence. No company can hand someone else your address.&lt;/p&gt;




&lt;p&gt;I spent the past five days participating in the &lt;strong&gt;100 Days of Solana challenge by MLH&lt;/strong&gt;, understanding identity on Solana, and I realised — I never really owned my identity on Web2. But on Solana, it lives in my hands.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Meri chabi, meri pehchan. And I hope now you too understand what it means.&lt;/em&gt;&lt;/p&gt;

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