<?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: LittleNezhaMin</title>
    <description>The latest articles on DEV Community by LittleNezhaMin (@truongcongminh96).</description>
    <link>https://dev.to/truongcongminh96</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%2F3909135%2F41c3172f-c157-413b-bf85-e1f409c49900.jpg</url>
      <title>DEV Community: LittleNezhaMin</title>
      <link>https://dev.to/truongcongminh96</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/truongcongminh96"/>
    <language>en</language>
    <item>
      <title>Understanding Solana’s Account Model as a Web2 Developer</title>
      <dc:creator>LittleNezhaMin</dc:creator>
      <pubDate>Sun, 17 May 2026 14:44:14 +0000</pubDate>
      <link>https://dev.to/truongcongminh96/understanding-solanas-account-model-as-a-web2-developer-4dbg</link>
      <guid>https://dev.to/truongcongminh96/understanding-solanas-account-model-as-a-web2-developer-4dbg</guid>
      <description>&lt;p&gt;When I first started learning Solana, the thing that confused me most wasn’t transactions or wallets.&lt;/p&gt;

&lt;p&gt;It was accounts.&lt;/p&gt;

&lt;p&gt;Every tutorial kept talking about accounts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wallet accounts&lt;/li&gt;
&lt;li&gt;Program accounts&lt;/li&gt;
&lt;li&gt;Token accounts&lt;/li&gt;
&lt;li&gt;Data accounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first, it sounded like blockchain jargon overload.&lt;/p&gt;

&lt;p&gt;But after spending a few days inspecting accounts using the Solana CLI and Explorer, something finally clicked:&lt;/p&gt;

&lt;p&gt;On Solana, everything is an account.&lt;/p&gt;

&lt;p&gt;Once you understand that idea, the rest of Solana starts making a lot more sense.&lt;/p&gt;

&lt;p&gt;In this article, I’ll explain Solana’s account model from the perspective of a Web2 developer.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Mental Shift: Solana Is a Giant Key-Value Store&lt;/p&gt;

&lt;p&gt;In Web2, we usually think in terms of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;tables&lt;/li&gt;
&lt;li&gt;backend servers&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;application state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solana works differently.&lt;/p&gt;

&lt;p&gt;Instead of storing application state inside a backend server, Solana stores everything inside accounts on-chain.&lt;/p&gt;

&lt;p&gt;Every Solana Account Has the Same Structure&lt;/p&gt;

&lt;p&gt;No matter what type of account you inspect, they all contain the same core fields.&lt;/p&gt;

&lt;p&gt;A Solana account contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lamports&lt;/li&gt;
&lt;li&gt;data&lt;/li&gt;
&lt;li&gt;owner&lt;/li&gt;
&lt;li&gt;executable&lt;/li&gt;
&lt;li&gt;rent_epoch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s an example using the Solana CLI:&lt;br&gt;
&lt;code&gt;solana account &amp;lt;ACCOUNT_ADDRESS&amp;gt;&lt;/code&gt;&lt;br&gt;
Example output:&lt;br&gt;
`{&lt;/p&gt;

&lt;p&gt;"lamports": 1505728269681,&lt;/p&gt;

&lt;p&gt;"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",&lt;/p&gt;

&lt;p&gt;"executable": false,&lt;/p&gt;

&lt;p&gt;"rentEpoch": 18446744073709551615,&lt;/p&gt;

&lt;p&gt;"data": [...]&lt;/p&gt;

&lt;p&gt;}`&lt;br&gt;
Let’s break those fields down.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lamports = SOL Balance&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Lamports are the smallest unit of SOL.&lt;/p&gt;

&lt;p&gt;Think of them like satoshis in Bitcoin.&lt;br&gt;
&lt;code&gt;1 SOL = 1,000,000,000 lamports&lt;/code&gt;&lt;br&gt;
If an account has:&lt;br&gt;
&lt;code&gt;1500000000 lamports&lt;/code&gt;&lt;br&gt;
That means it owns:&lt;br&gt;
&lt;code&gt;1.5 SOL&lt;/code&gt;&lt;br&gt;
Every account can hold SOL, not just wallets.&lt;/p&gt;

&lt;p&gt;That surprised me at first.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Data = Arbitrary State Storage&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The data field is where programs store information.&lt;/p&gt;

&lt;p&gt;This could contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;token balances&lt;/li&gt;
&lt;li&gt;NFT metadata&lt;/li&gt;
&lt;li&gt;game inventory&lt;/li&gt;
&lt;li&gt;DeFi positions&lt;/li&gt;
&lt;li&gt;DAO governance state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important thing is:&lt;/p&gt;

&lt;p&gt;Solana stores raw bytes.&lt;/p&gt;

&lt;p&gt;Programs are responsible for interpreting those bytes.&lt;/p&gt;

&lt;p&gt;This feels similar to reading binary files or serialized objects in traditional systems.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Owner = Who Controls the Account&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is one of the most important concepts in Solana.&lt;/p&gt;

&lt;p&gt;Every account has an owner.&lt;/p&gt;

&lt;p&gt;But the owner is usually NOT a user.&lt;/p&gt;

&lt;p&gt;It’s typically a program.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;code&gt;TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA&lt;/code&gt;&lt;br&gt;
That’s the SPL Token Program.&lt;/p&gt;

&lt;p&gt;If an account is owned by the Token Program, only the Token Program can modify that account’s data.&lt;/p&gt;

&lt;p&gt;This creates a very clean security model.&lt;/p&gt;

&lt;p&gt;Ownership Rules&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Only the owner program can modify account data&lt;/li&gt;
&lt;li&gt;Only the owner program can debit lamports&lt;/li&gt;
&lt;li&gt;Anyone can send lamports into a writable account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s surprisingly elegant.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Executable = Is This a Program?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This field is simply:&lt;br&gt;
&lt;code&gt;true or false&lt;/code&gt;&lt;br&gt;
If:&lt;br&gt;
&lt;code&gt;executable = true&lt;/code&gt;&lt;br&gt;
then the account contains executable program code.&lt;/p&gt;

&lt;p&gt;If:&lt;br&gt;
&lt;code&gt;executable = false&lt;/code&gt;&lt;br&gt;
then it’s just a data account.&lt;/p&gt;

&lt;p&gt;This is where Solana differs a lot from Ethereum.&lt;br&gt;
Programs Don’t Store Their Own State&lt;/p&gt;

&lt;p&gt;This was probably the biggest mental shift for me.&lt;/p&gt;

&lt;p&gt;In Ethereum, smart contracts usually contain both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code&lt;/li&gt;
&lt;li&gt;state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On Solana, programs are stateless.&lt;/p&gt;

&lt;p&gt;The executable code lives in one account.&lt;/p&gt;

&lt;p&gt;The data lives in separate accounts.&lt;br&gt;
Programs read and write external accounts instead of storing state internally.&lt;/p&gt;

&lt;p&gt;That design allows Solana to parallelize transactions more efficiently.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Rent Epoch (Deprecated)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Older Solana docs talk about rent_epoch.&lt;/p&gt;

&lt;p&gt;Today, this field is effectively deprecated and usually set to:&lt;br&gt;
&lt;code&gt;18446744073709551615&lt;/code&gt;&lt;br&gt;
Most developers can ignore it now.&lt;br&gt;
Rent Exemption&lt;/p&gt;

&lt;p&gt;One thing I found interesting is that storing data on Solana costs money.&lt;/p&gt;

&lt;p&gt;Every account must maintain a minimum balance to remain on-chain.&lt;/p&gt;

&lt;p&gt;This is called being:&lt;br&gt;
&lt;code&gt;rent-exempt&lt;/code&gt;&lt;br&gt;
The larger the account data size, the more SOL it needs.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;code&gt;solana rent 0&lt;/code&gt;&lt;br&gt;
returns the minimum balance needed for an empty account.&lt;/p&gt;

&lt;p&gt;At the time I tested it, it was around:&lt;br&gt;
&lt;code&gt;0.00089 SOL&lt;/code&gt;&lt;br&gt;
This mechanism prevents the blockchain from being flooded with useless data forever.&lt;br&gt;
My Favorite Analogy: Solana as a Filesystem&lt;/p&gt;

&lt;p&gt;The analogy that finally made everything click for me was this:&lt;/p&gt;

&lt;p&gt;Imagine Solana as a giant operating system filesystem.&lt;/p&gt;

&lt;p&gt;Each account is like a file.&lt;/p&gt;

&lt;p&gt;Accounts contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;metadata&lt;/li&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;li&gt;contents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Programs are executable files.&lt;/p&gt;

&lt;p&gt;Data accounts are documents those programs read and write.&lt;/p&gt;

&lt;p&gt;The System Program acts like the operating system kernel managing account creation and ownership.&lt;/p&gt;

&lt;p&gt;Once I started thinking about Solana this way, the architecture suddenly felt much more familiar.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;At first, Solana’s account model felt strange coming from Web2.&lt;/p&gt;

&lt;p&gt;But now I actually think it’s one of the cleanest parts of Solana’s design.&lt;/p&gt;

&lt;p&gt;The key ideas that helped me most were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everything is an account&lt;/li&gt;
&lt;li&gt;Programs are stateless&lt;/li&gt;
&lt;li&gt;Ownership controls security&lt;/li&gt;
&lt;li&gt;Accounts are just structured storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once those concepts click, reading Solana transactions and programs becomes much easier.&lt;/p&gt;

&lt;p&gt;If you’re a Web2 developer learning Solana right now, my advice is simple:&lt;/p&gt;

&lt;p&gt;Spend time inspecting real accounts.&lt;/p&gt;

&lt;p&gt;Use:&lt;br&gt;
&lt;code&gt;solana account &amp;lt;address&amp;gt;&lt;/code&gt;&lt;br&gt;
Look at Explorer.&lt;/p&gt;

&lt;p&gt;Read the raw JSON.&lt;/p&gt;

&lt;p&gt;Eventually the patterns start revealing themselves naturally.&lt;/p&gt;

&lt;p&gt;And honestly, that’s when blockchain development starts becoming really fun 🚀&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
    </item>
    <item>
      <title>Solana Transactions Explained for Backend Developers</title>
      <dc:creator>LittleNezhaMin</dc:creator>
      <pubDate>Sun, 10 May 2026 07:11:09 +0000</pubDate>
      <link>https://dev.to/truongcongminh96/solana-transactions-explained-for-backend-developers-43ei</link>
      <guid>https://dev.to/truongcongminh96/solana-transactions-explained-for-backend-developers-43ei</guid>
      <description>&lt;p&gt;Over the past few days in #100DaysOfSolana, I went from knowing almost nothing about Solana transactions to building my own CLI transfer tool, tracking transaction confirmations in real time, and debugging failed on-chain transactions.&lt;/p&gt;

&lt;p&gt;Coming from a backend/web2 background, Solana transactions initially felt confusing. Terms like signatures, blockhashes, commitment levels, and atomic state changes sounded very different from the APIs and databases I was used to.&lt;/p&gt;

&lt;p&gt;But after building and breaking transactions myself, something finally clicked.&lt;/p&gt;

&lt;p&gt;In this post, I want to explain Solana transactions from the perspective of a backend developer.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

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

&lt;p&gt;At first, I treated a Solana transaction like an HTTP request:&lt;br&gt;
`POST /transfer&lt;/p&gt;

&lt;p&gt;{&lt;/p&gt;

&lt;p&gt;"from": "...",&lt;/p&gt;

&lt;p&gt;"to": "...",&lt;/p&gt;

&lt;p&gt;"amount": 0.01&lt;/p&gt;

&lt;p&gt;}`&lt;/p&gt;

&lt;p&gt;But that mental model is incomplete.&lt;/p&gt;

&lt;p&gt;A Solana transaction is closer to a signed, atomic database transaction that gets executed by a decentralized network.&lt;/p&gt;

&lt;p&gt;Unlike a normal API request:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;there is no centralized server&lt;/li&gt;
&lt;li&gt;every transaction must be cryptographically signed&lt;/li&gt;
&lt;li&gt;transactions expire quickly&lt;/li&gt;
&lt;li&gt;failures still cost fees&lt;/li&gt;
&lt;li&gt;consensus happens in stages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point surprised me the most.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Transaction Confirmation Is Not Binary&lt;/p&gt;

&lt;p&gt;In web2 systems, requests are usually either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pending&lt;/li&gt;
&lt;li&gt;successful&lt;/li&gt;
&lt;li&gt;failed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But on Solana, transactions move through multiple commitment levels:&lt;/p&gt;

&lt;p&gt;Processed&lt;/p&gt;

&lt;p&gt;A validator received and processed the transaction.&lt;/p&gt;

&lt;p&gt;This is similar to:&lt;/p&gt;

&lt;p&gt;“The server accepted your request.”&lt;/p&gt;

&lt;p&gt;But it is not finalized yet.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Confirmed&lt;/p&gt;

&lt;p&gt;A supermajority of validators voted on the block containing your transaction.&lt;/p&gt;

&lt;p&gt;This is effectively:&lt;/p&gt;

&lt;p&gt;“The network agrees your transaction succeeded.”&lt;/p&gt;

&lt;p&gt;Interestingly:&lt;/p&gt;

&lt;p&gt;no confirmed transaction in Solana history has ever been reversed.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Finalized&lt;/p&gt;

&lt;p&gt;31+ additional blocks were built on top of your transaction.&lt;/p&gt;

&lt;p&gt;At this point, the transaction is considered irreversible.&lt;/p&gt;

&lt;p&gt;This feels similar to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;replicated database commits&lt;/li&gt;
&lt;li&gt;durable writes&lt;/li&gt;
&lt;li&gt;globally finalized state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Building My Own Transfer Tool&lt;/p&gt;

&lt;p&gt;One of the most useful exercises was building a reusable CLI transfer tool using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;@solana/kit&lt;/li&gt;
&lt;li&gt;Solana CLI keypairs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of manually typing transfer commands every time, the tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;accepts recipient + amount arguments&lt;/li&gt;
&lt;li&gt;checks balances&lt;/li&gt;
&lt;li&gt;signs transactions locally&lt;/li&gt;
&lt;li&gt;submits transactions to devnet&lt;/li&gt;
&lt;li&gt;tracks confirmation progress&lt;/li&gt;
&lt;li&gt;prints Explorer links
&lt;code&gt;node transfer.mjs &amp;lt;RECIPIENT&amp;gt; 0.01&lt;/code&gt;
Terminal output:
`Solana Transfer Tool
====================
Connected to Solana devnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Status: processed ✅&lt;br&gt;
Status: confirmed ✅&lt;br&gt;
Status: finalized ✅&lt;/p&gt;

&lt;p&gt;Transaction successful!`&lt;br&gt;
his felt very similar to building internal tooling around payment APIs in web2.&lt;/p&gt;

&lt;p&gt;Except this time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;there was no Stripe&lt;/li&gt;
&lt;li&gt;no backend server&lt;/li&gt;
&lt;li&gt;no payment gateway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The transaction went directly to the blockchain network.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Failed Transactions Taught Me More Than Successful Ones&lt;/p&gt;

&lt;p&gt;One thing I underestimated:&lt;/p&gt;

&lt;p&gt;failed transactions are incredibly educational.&lt;/p&gt;

&lt;p&gt;For example, I intentionally tried sending more SOL than my balance:&lt;br&gt;
&lt;code&gt;node transfer.mjs RECIPIENT 999&lt;/code&gt;&lt;br&gt;
Result:&lt;br&gt;
&lt;code&gt;Transaction failed:&lt;br&gt;
Insufficient balance...&lt;/code&gt;&lt;br&gt;
I also learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;failed transactions still consume fees&lt;/li&gt;
&lt;li&gt;blockhashes expire&lt;/li&gt;
&lt;li&gt;commitment levels matter&lt;/li&gt;
&lt;li&gt;RPC polling is essential for good UX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This changed how I think about blockchain applications.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Biggest Difference From Web2&lt;/p&gt;

&lt;p&gt;The biggest mindset shift for me was this:&lt;/p&gt;

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

&lt;p&gt;servers own state&lt;/p&gt;

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

&lt;p&gt;the network owns state&lt;/p&gt;

&lt;p&gt;Your application becomes more like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a transaction builder&lt;/li&gt;
&lt;li&gt;a signing interface&lt;/li&gt;
&lt;li&gt;a state interpreter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;instead of a traditional CRUD backend.&lt;/p&gt;

&lt;p&gt;That changes everything.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;A week ago, Solana transactions looked intimidating.&lt;/p&gt;

&lt;p&gt;Now they feel surprisingly elegant.&lt;/p&gt;

&lt;p&gt;Once I stopped trying to force blockchain into traditional web2 mental models, the architecture started making sense:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;atomic state changes&lt;/li&gt;
&lt;li&gt;cryptographic authorization&lt;/li&gt;
&lt;li&gt;distributed consensus&lt;/li&gt;
&lt;li&gt;deterministic execution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I still have a lot to learn, but building and debugging real transactions helped far more than just reading documentation.&lt;/p&gt;

&lt;p&gt;If you’re a backend developer exploring Solana for the first time:&lt;br&gt;
my biggest recommendation is simple:&lt;/p&gt;

&lt;p&gt;build small tools yourself.&lt;/p&gt;

&lt;p&gt;That is when the concepts really start to click.&lt;/p&gt;

&lt;h1&gt;
  
  
  Solana #Blockchain #Web3 #100DaysOfSolana
&lt;/h1&gt;

</description>
      <category>backend</category>
      <category>blockchain</category>
      <category>tutorial</category>
      <category>web3</category>
    </item>
    <item>
      <title>Week 2 of #100DaysOfSolana: When “Public Database” Finally Clicked</title>
      <dc:creator>LittleNezhaMin</dc:creator>
      <pubDate>Sat, 02 May 2026 14:09:07 +0000</pubDate>
      <link>https://dev.to/truongcongminh96/week-2-of-100daysofsolana-when-public-database-finally-clicked-44gp</link>
      <guid>https://dev.to/truongcongminh96/week-2-of-100daysofsolana-when-public-database-finally-clicked-44gp</guid>
      <description>&lt;p&gt;After two weeks building on Solana, I feel like my mental model of “blockchain” has completely changed.&lt;/p&gt;

&lt;p&gt;Before this, I used to think blockchain data was something abstract, complex, and hard to access. Something like a black box where transactions go in, and magic comes out.&lt;/p&gt;

&lt;p&gt;Reality?&lt;br&gt;
It’s surprisingly simple… and surprisingly different.&lt;br&gt;
🧱 What I Expected vs Reality&lt;br&gt;
Coming from a fullstack background (PHP, Go, APIs, databases), I expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tables&lt;/li&gt;
&lt;li&gt;Queries (SELECT, JOIN, WHERE)&lt;/li&gt;
&lt;li&gt;Structured schemas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But on Solana, there are no tables.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accounts = your data&lt;/li&gt;
&lt;li&gt;Programs = your logic&lt;/li&gt;
&lt;li&gt;RPC = your API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first, this felt strange.&lt;/p&gt;

&lt;p&gt;But once I reframed it like this:&lt;/p&gt;

&lt;p&gt;Solana = a giant public database you can read from&lt;/p&gt;

&lt;p&gt;Things started to make sense.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;⚡ The Moment It Clicked&lt;/p&gt;

&lt;p&gt;The biggest “aha” moment came when I fetched:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Balance of an address&lt;/li&gt;
&lt;li&gt;Recent transactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using just an RPC call.&lt;br&gt;
No authentication.&lt;br&gt;
No backend.&lt;br&gt;
No database setup.&lt;br&gt;
Just:&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;balance&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it.&lt;br&gt;
At that moment, it clicked:&lt;br&gt;
This is just a read-only API… but global and trustless.&lt;br&gt;
🧩 What Surprised Me Most&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Same Code, Different Network = Completely Different Data&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When I compared devnet vs mainnet, I got:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Devnet → 5 SOL + transactions (from testing)&lt;/li&gt;
&lt;li&gt;Mainnet → 0 SOL + no activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same address. Same code.&lt;/p&gt;

&lt;p&gt;Completely different reality.&lt;/p&gt;

&lt;p&gt;This felt exactly like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Devnet = staging DB&lt;/li&gt;
&lt;li&gt;Mainnet = production DB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But with real money involved.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Everything is Public&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;You need auth&lt;/li&gt;
&lt;li&gt;You need permission&lt;/li&gt;
&lt;li&gt;You need APIs&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;You can read anything&lt;/li&gt;
&lt;li&gt;Anytime&lt;/li&gt;
&lt;li&gt;From anywhere&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s powerful… and a bit scary 😅&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;RPC Feels Like an API, But It’s Not Quite the Same&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Working with Solana RPC feels familiar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request → Response&lt;/li&gt;
&lt;li&gt;JSON data&lt;/li&gt;
&lt;li&gt;Async calls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the mindset is different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You’re not querying your backend&lt;/li&gt;
&lt;li&gt;You’re querying a shared global state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That changes how you think about data completely.&lt;br&gt;
🚧 What I’m Still Confused About&lt;/p&gt;

&lt;p&gt;A few things I’m still figuring out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to write data safely (transactions, signing, fees)&lt;/li&gt;
&lt;li&gt;How programs (smart contracts) actually store structured data&lt;/li&gt;
&lt;li&gt;Best practices for building real apps on top of accounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reading data feels easy.&lt;/p&gt;

&lt;p&gt;Writing data feels like the next big challenge.&lt;br&gt;
🚀 What I Want to Learn Next&lt;/p&gt;

&lt;p&gt;Next, I want to focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sending transactions&lt;/li&gt;
&lt;li&gt;Interacting with programs&lt;/li&gt;
&lt;li&gt;Building a real dApp with a wallet (Phantom, etc.)&lt;/li&gt;
&lt;li&gt;Moving from “read-only” → “read + write”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Week 2 made one thing clear:&lt;/p&gt;

&lt;p&gt;Blockchain isn’t magic.&lt;br&gt;
It’s just a different way of structuring and accessing data.&lt;/p&gt;

&lt;p&gt;And once that clicks…&lt;/p&gt;

&lt;p&gt;Everything becomes a lot more approachable.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;If you’re also doing #100DaysOfSolana, I’d love to connect and see what you’re building 🚀&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%2Fynhjarwrt7qa82e6ebis.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%2Fynhjarwrt7qa82e6ebis.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>solana</category>
      <category>web3</category>
      <category>blockchain</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Week 2 of #100DaysOfSolana: When “Public Database” Finally Clicked

After two weeks building on Solana, I feel like my mental model of “blockchain” has completely changed.

Before this, I used to think blockchain data was something abstract, complex, and h</title>
      <dc:creator>LittleNezhaMin</dc:creator>
      <pubDate>Sat, 02 May 2026 13:59:49 +0000</pubDate>
      <link>https://dev.to/truongcongminh96/week-2-of-100daysofsolana-when-public-database-finally-clicked-after-two-weeks-building-on-38h2</link>
      <guid>https://dev.to/truongcongminh96/week-2-of-100daysofsolana-when-public-database-finally-clicked-after-two-weeks-building-on-38h2</guid>
      <description></description>
    </item>
  </channel>
</rss>
