<?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: Carlos Prada</title>
    <description>The latest articles on DEV Community by Carlos Prada (@gorilaprada).</description>
    <link>https://dev.to/gorilaprada</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%2F3909240%2F8b559936-ea31-4530-a598-8f735e35b9d9.jpg</url>
      <title>DEV Community: Carlos Prada</title>
      <link>https://dev.to/gorilaprada</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gorilaprada"/>
    <language>en</language>
    <item>
      <title># Day 24: In Solana, Everything is an Account</title>
      <dc:creator>Carlos Prada</dc:creator>
      <pubDate>Sat, 23 May 2026 01:09:54 +0000</pubDate>
      <link>https://dev.to/gorilaprada/-day-24-in-solana-everything-is-an-account-48hm</link>
      <guid>https://dev.to/gorilaprada/-day-24-in-solana-everything-is-an-account-48hm</guid>
      <description>&lt;p&gt;On Solana there is just... accounts. One model. Everything is an account — your wallet, a deployed program, a token mint, a user's token balance. All of them live in the same flat key-value store where the key is a 32-byte address and the value is the account data.&lt;/p&gt;

&lt;p&gt;It sounds simple. It's actually a pretty elegant design decision with a lot of implications.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Filesystem Analogy
&lt;/h2&gt;

&lt;p&gt;Here's the mental model that clicked for me: think of Solana like a filesystem.&lt;br&gt;
Every account is a file. Each account (file) has:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;metadata:

&lt;ul&gt;
&lt;li&gt;owner&lt;/li&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;li&gt;size&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;contents:

&lt;ul&gt;
&lt;li&gt;the actual data&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Program accounts are executable files. Data accounts are the documents those programs read from and write to. And the &lt;a href="https://explorer.solana.com/address/11111111111111111111111111111111" rel="noopener noreferrer"&gt;System Program&lt;/a&gt;? That's the OS kernel — it handles creating new files and transferring ownership.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Five Fields Every Account Has
&lt;/h2&gt;

&lt;p&gt;No matter what an account represents, it always has the same five fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;lamports&lt;/code&gt;&lt;/strong&gt; — the SOL balance. 1 SOL = 1,000,000,000 lamports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;data&lt;/code&gt;&lt;/strong&gt; — a raw byte array. This is where all state lives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;owner&lt;/code&gt;&lt;/strong&gt; — the program that controls this account and can modify its data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;executable&lt;/code&gt;&lt;/strong&gt; — a boolean. If &lt;code&gt;true&lt;/code&gt;, this account contains a deployed program.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;rent_epoch&lt;/code&gt;&lt;/strong&gt; — deprecated. You'll see it set to &lt;code&gt;u64::MAX&lt;/code&gt; on all modern accounts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ownership rule is the key security primitive: &lt;strong&gt;only the owner program can modify an account's data or debit its lamports&lt;/strong&gt;. Anyone can credit lamports to any writable account. Simple, but powerful.&lt;/p&gt;


&lt;h2&gt;
  
  
  Programs Don't Store Their Own State
&lt;/h2&gt;

&lt;p&gt;This is the one that surprises every Web2 developer: &lt;strong&gt;Solana programs are stateless&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A program's executable bytecode lives in one account. Any data that program needs lives in entirely separate accounts. The program just reads and writes those accounts at runtime. It's the difference between a web server (the program) and a database (the data accounts) — they're separate things.&lt;/p&gt;


&lt;h2&gt;
  
  
  Reading a Real Account On-Chain
&lt;/h2&gt;

&lt;p&gt;To make this concrete, I fetched the &lt;strong&gt;Wrapped SOL mint account&lt;/strong&gt; — one of the most fundamental accounts on Solana mainnet. Here's how I pulled the raw data using &lt;code&gt;@solana/kit&lt;/code&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="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;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;getBase64Encoder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;getBase16Decoder&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;getMintDecoder&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-program/token&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;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="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;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mintAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;address&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;So11111111111111111111111111111111111111112&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="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;accountInfo&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;getAccountInfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mintAddress&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="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;dataBytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getBase64Encoder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;accountInfo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The account data comes back as base64. Once decoded into raw bytes, I ran it through two decode paths — the Token Program codec, and a manual byte-level read using &lt;code&gt;DataView&lt;/code&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;// Codec approach&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getMintDecoder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dataBytes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Manual byte-level approach&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;view&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;DataView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dataBytes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dataBytes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;byteOffset&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dataBytes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;byteLength&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;supply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBigUint64&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// bytes 36–43, little-endian&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decimals&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;view&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getUint8&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;44&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;          &lt;span class="c1"&gt;// byte 44&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both approaches confirmed the same thing — here's what the terminal showed:&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%2F08vrzgtwh47m6ats3ivp.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%2F08vrzgtwh47m6ats3ivp.png" alt="Terminal output showing the decoded Wrapped SOL mint account with Supply: 0, Decimals: 9, Is initialized: true, and no mint or freeze authority set." width="800" height="877"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Supply is 0 (wSOL is minted on demand), decimals is 9, and both mint and freeze authorities are &lt;code&gt;null&lt;/code&gt; — meaning no one can mint more or freeze transfers. The account is fully decentralized.&lt;/p&gt;




&lt;h2&gt;
  
  
  Rent Exemption
&lt;/h2&gt;

&lt;p&gt;One last thing: every account must hold a minimum lamport balance proportional to its data size. This keeps the validator state from bloating with abandoned accounts. For a zero-data account it's roughly 0.00089 SOL. Using the &lt;a href="https://solana.com/docs/intro/installation/solana-cli-basics" rel="noopener noreferrer"&gt;Solana CLI&lt;/a&gt; You can calculate exact amounts with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;solana rent &amp;lt;data-size-in-bytes&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If an account drops below this threshold, it gets purged. So whenever you create an account in a program, you're responsible for funding it past the rent-exempt minimum.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaway
&lt;/h2&gt;

&lt;p&gt;Solana's account model is the foundation for everything else — PDAs, token accounts, program-derived state. Once you internalize that &lt;em&gt;all state lives in accounts&lt;/em&gt;, &lt;em&gt;programs are stateless&lt;/em&gt;, and &lt;em&gt;ownership = write permission&lt;/em&gt;, the rest of the ecosystem starts to make a lot more sense.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post is part of my 100 Days of Solana series. Follow along as I go from zero to deployed program. &lt;a href="https://github.com/gorilaprada/100-days-of-solana" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>blockchain</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Day 20 of 100-Days-of-Solana: Solana transactions look complicated? Here's a breakdown.</title>
      <dc:creator>Carlos Prada</dc:creator>
      <pubDate>Fri, 15 May 2026 23:02:56 +0000</pubDate>
      <link>https://dev.to/gorilaprada/day-20-of-100-days-of-solana-solana-transactions-look-complicated-heres-a-breakdown-3503</link>
      <guid>https://dev.to/gorilaprada/day-20-of-100-days-of-solana-solana-transactions-look-complicated-heres-a-breakdown-3503</guid>
      <description>&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;When using a high-level library like @solana/kit, sending SOL looks like this : &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%2Fthd2wm6hsz61gf2skr5h.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%2Fthd2wm6hsz61gf2skr5h.png" alt=" " width="650" height="503"&gt;&lt;/a&gt;&lt;br&gt;
But what happens under the hood? Bear with me—I'm just a newbie trying to understand this—but here is how a raw transaction is actually structured.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Core Content: Understanding a Solana Transaction
&lt;/h2&gt;

&lt;p&gt;At the highest level, a Solana transaction consists of just two things: Signatures and the Message.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Signatures
&lt;/h3&gt;

&lt;p&gt;A compact-encoded array of 64-byte Ed25519 signatures.&lt;/p&gt;

&lt;p&gt;💡 In human terms: Every account that needs to approve the transaction must sign the serialized message with its private key. It’s the network's way of verifying that the transaction was explicitly authorized by the required accounts.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Message
&lt;/h3&gt;

&lt;p&gt;The message contains the actual logic, broken down into four sub-levels:&lt;/p&gt;

&lt;p&gt;Sub-level 1. Header: Metadata specifying the total required signers, read-only signers, and read-only non-signers. It acts as a checklist for the runtime to validate the transaction.&lt;/p&gt;

&lt;p&gt;Sub-level 2. Account Keys: An array of all account addresses required by the instructions.&lt;/p&gt;

&lt;p&gt;Sub-level 3. Recent Blockhash: A timestamp-like value. If it is older than the 150 most recent blocks, the validators will reject the transaction.&lt;/p&gt;

&lt;p&gt;Sub-level 4. Instructions: The actual commands for programs to execute (e.g., Move X amount of SOL from Account 1 to Account 2).&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 The Raw JSON Structure:
&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%2F8ltydc5rtdzdw1mu3m30.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%2F8ltydc5rtdzdw1mu3m30.png" alt=" " width="800" height="597"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🤔 What is {"version": 0}?
&lt;/h3&gt;

&lt;p&gt;Solana transactions have a strict size limit of 1232 bytes. Because public keys are 32 bytes each, listing too many accounts will break this limit.&lt;/p&gt;

&lt;p&gt;To fix this, Solana introduced two versions:&lt;/p&gt;

&lt;p&gt;Legacy: Standard transactions limited by how many raw addresses you can fit.&lt;/p&gt;

&lt;p&gt;v0: A version that introduces Address Lookup Tables (ALTs).&lt;/p&gt;

&lt;p&gt;An ALT is an account on the blockchain that stores a list of addresses. Instead of passing full 32-byte addresses, you include the ALT address in your Account keys ("staticAccounts" in the JSON above) and reference the other addresses using a tiny 1-byte index. Note: Addresses inside an ALT cannot act as signers.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Takeaway
&lt;/h2&gt;

&lt;p&gt;It is great to see what consistency can do. I went from knowing nothing on Day 1 to being able to somewhat explain transactions on a blockchain—one of the most complicated pieces of software to wrap your mind around—by Day 20. Let's go! 🚀&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
      <category>100daysofsolana</category>
    </item>
    <item>
      <title>100 Days of Solana: Week 2</title>
      <dc:creator>Carlos Prada</dc:creator>
      <pubDate>Sat, 09 May 2026 16:24:42 +0000</pubDate>
      <link>https://dev.to/gorilaprada/100-days-of-solana-week-2-2igc</link>
      <guid>https://dev.to/gorilaprada/100-days-of-solana-week-2-2igc</guid>
      <description>&lt;p&gt;Two weeks into the &lt;strong&gt;#100DaysOfSolana&lt;/strong&gt; challenge, and I’m finding that the most valuable part of this journey isn't just the code I'm writing, but the perspective I'm gaining.&lt;/p&gt;

&lt;h2&gt;
  
  
  From User to Developer: My Backstory
&lt;/h2&gt;

&lt;p&gt;I’ve been a user of the Solana ecosystem since 2021—long before I ever typed my first line of code. In fact, Solana is one of the main reasons I started programming in the first place. &lt;/p&gt;

&lt;p&gt;The ease of use and the near-instant transaction settlement were phenomenal then, and they still are today. It sparked a genuine curiosity that shifted me from just using the tech to wanting to build with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The &lt;code&gt;@solana/kit&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Coming into the second week, one of my biggest takeaways has been working with the &lt;strong&gt;&lt;code&gt;@solana/kit&lt;/code&gt;&lt;/strong&gt;. Knowing that a whole kit is written to implement blockchain functionality easily is a game-changer for someone coming from a web dev background. It makes the integration feel intuitive rather than overwhelming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Slow and Steady Wins the Race
&lt;/h2&gt;

&lt;p&gt;The format of this challenge—taking things slow and guided from a &lt;strong&gt;web developer's perspective&lt;/strong&gt;—has been incredibly beneficial for my understanding of real-world implementation.&lt;/p&gt;

&lt;p&gt;When you first start with Solana, the temptation is to jump straight in with:&lt;br&gt;
&lt;code&gt;npm create solana-dapp@latest&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;While that tool is powerful, it’s often &lt;strong&gt;too much in one go&lt;/strong&gt;. For a learner, it generates a massive boilerplate that can hide the underlying logic. Plus, managing the multiple vulnerabilities that often come from installing a whole premade project with heavy dependencies can be a major distraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;I am genuinely grateful for this specific format. It allows me to build a solid foundation without getting lost in the noise of complex scaffolding. &lt;/p&gt;

&lt;p&gt;I’m excited to keep learning and pushing forward until I can create something entirely my own utilizing blockchain technology. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See you all in Week 3! 🚀&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>buildinpublic</category>
      <category>devjournal</category>
      <category>web3</category>
    </item>
    <item>
      <title>From Script to Browser: Migrating My First Custom Solana Keypair</title>
      <dc:creator>Carlos Prada</dc:creator>
      <pubDate>Mon, 04 May 2026 01:17:53 +0000</pubDate>
      <link>https://dev.to/gorilaprada/from-script-to-browser-migrating-my-first-custom-solana-keypair-45cg</link>
      <guid>https://dev.to/gorilaprada/from-script-to-browser-migrating-my-first-custom-solana-keypair-45cg</guid>
      <description>&lt;h2&gt;
  
  
  What I Did
&lt;/h2&gt;

&lt;p&gt;I used a simple JavaScript script and the @solana/kit library to programmatically generate a new keypair, saved the secret key to a local .json file, and then wrote a second script to extract that seed so I could manually import it into my Phantom wallet extension for devnet testing.&lt;/p&gt;

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

&lt;p&gt;The biggest shift from Web2 was realizing that my "identity" is just a cryptographic string of numbers; once I had that secret key, I could "teleport" my wallet from a raw JSON file on my hard drive directly into a browser extension instantly—no passwords or recovery emails required.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;Now that I’ve mastered the "manual" side of key management, I’m looking forward to building a small frontend that allows users to connect their own wallets and sign transactions via the Wallet Adapter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Note on Security:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;While this was an incredible learning experience to see how keypairs actually function, remember that storing unencrypted private keys in a .json file is high-risk! This wallet is strictly for devnet experimentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  100DaysOfSolana @solana_devs
&lt;/h1&gt;

</description>
      <category>beginners</category>
      <category>blockchain</category>
      <category>javascript</category>
      <category>web3</category>
    </item>
    <item>
      <title>The Identity Crisis How blockchain improves your life</title>
      <dc:creator>Carlos Prada</dc:creator>
      <pubDate>Sat, 02 May 2026 15:48:37 +0000</pubDate>
      <link>https://dev.to/gorilaprada/the-identity-crisishow-blockchain-improves-your-life-38ef</link>
      <guid>https://dev.to/gorilaprada/the-identity-crisishow-blockchain-improves-your-life-38ef</guid>
      <description>&lt;p&gt;We’ve all worried that someone could steal our identity just by getting a hand on our personal info. Honestly? That threat isn't going away. Social engineering is a menace to society, especially in a world where information moves at the speed of a click.&lt;br&gt;
Blockchain offers a fix to some of these problems. I say some because no solution is perfect, especially for an issue this messy. But by using specific mechanisms on the Solana blockchain, we can shrink the surface area of what can go wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It limits the attack vectors to one.&lt;/strong&gt; There—you can stop reading now if you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Web2 is Getting Weird
&lt;/h2&gt;

&lt;p&gt;Still here? Good. Let's talk about how keypairs make life easier. Have you tried to log into anything lately? It’s a mess.&lt;/p&gt;

&lt;p&gt;Input your password.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Wait, please provide a 2FA code.”&lt;/li&gt;
&lt;li&gt;“Now approve the sign-in from your phone.”&lt;/li&gt;
&lt;li&gt;“But I don’t have my phone on me!”&lt;/li&gt;
&lt;li&gt;“Too bad. Access denied.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And don’t even get me started on the mountain of paperwork banks and governments want just so you can use your own money. Cryptographic keypair authentication is just... easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Mom" Test
&lt;/h2&gt;

&lt;p&gt;You’ve seen this technology in action. It’s what lets your mom access her Google or Apple account with a thumbprint or a face scan. You don’t have to hunt for the password she lost (the one she swears she&lt;br&gt;
told you, but definitely didn't).&lt;/p&gt;

&lt;p&gt;The mechanism is simple:&lt;br&gt;
Public Key: A code you share with the world. It says, "Hey, this is me!"&lt;br&gt;
Private Key: A code you share with no one. It’s the mathematical proof that says, "It really is me, and here’s the signature to prove it."&lt;/p&gt;

&lt;p&gt;Boom. That’s it. You don't need to be a "big brain" cryptographer to use it; you just need to know how it's stored.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Big Tech Trap vs. The Solana Way
&lt;/h2&gt;

&lt;p&gt;This is where Solana shines. In the "Passkey" world of Big Tech, your private keys are often synced to the cloud. That means a massive corporation technically holds the keys to your kingdom. For a Netflix account? Fine. For your house title or your life savings? Maybe you don't want a cloud company in the middle of that.&lt;/p&gt;

&lt;p&gt;On Solana, you are the absolute owner of that private key.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;True Custody: You can write your key on a piece of paper and lock it in a safe. It becomes physically impossible to impersonate you unless someone literally steals that paper.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Censorship Resistant: Big Tech can block, censor, or ban you from their "secure" systems whenever they feel like it. Solana is ideology-agnostic. The blockchain doesn't care who you are; if the signature is valid, the gate opens.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  One Key to Rule Them All
&lt;/h2&gt;

&lt;p&gt;We need to unify protocols for ease of use, but decentralize the processing for security. Solana provides the high throughput and scalability to actually make this dream a reality for millions of people.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;So, next time you use one of those "magic" keypair methods, ask yourself: Who really owns this key, and how is it being processed?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>cybersecurity</category>
      <category>security</category>
      <category>web3</category>
    </item>
  </channel>
</rss>
