<?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>I Built a Token of Which I Have Full Control</title>
      <dc:creator>Carlos Prada</dc:creator>
      <pubDate>Mon, 01 Jun 2026 17:28:26 +0000</pubDate>
      <link>https://dev.to/gorilaprada/i-built-a-token-of-which-i-have-full-control-2a7b</link>
      <guid>https://dev.to/gorilaprada/i-built-a-token-of-which-i-have-full-control-2a7b</guid>
      <description>&lt;h2&gt;
  
  
  What Is This About?
&lt;/h2&gt;

&lt;p&gt;Recently I was doing the #100DaysOfSolana challenge and I created a token that has a permanent delegate account.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is that, you might ask?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As the Solana Token Extensions paper describes it: &lt;em&gt;"Allows specifying a permanent account delegate for a mint. This delegate has unlimited delegate privileges over any account for that mint, which means that it can burn or transfer any amount of tokens."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This means the account that is a permanent delegate has full control over that token (transfer and burn) without the approval of the owner's account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is It Hard to Create?
&lt;/h2&gt;

&lt;p&gt;Nope. Here is how you can do it if you have the Solana CLI installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;spl-token create-token &lt;span class="nt"&gt;--enable-permanent-delegate&lt;/span&gt; &lt;span class="nt"&gt;--program-id&lt;/span&gt; TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;spl-token&lt;/code&gt; is part of the &lt;a href="https://solana.com/docs/intro/installation" rel="noopener noreferrer"&gt;Solana CLI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;create-token&lt;/code&gt; is the command that initiates the token creation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--enable-permanent-delegate&lt;/code&gt; is the flag that activates the Token Extension on the token&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--program-id&lt;/code&gt; specifies the Token-2022 Program to create your token &lt;em&gt;(if the flag is not passed, the token will be initiated with another token program that does not support extensions)&lt;/em&gt;
That's it — your token is live. You can give it to people, seize it, or even burn it without any approval other than yours.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pros
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Good for companies that wish to have full control and must seize assets if legal infringements have been made.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cons
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The token is really not yours. Even if it is in your wallet, someone else can do whatever they want with it. And that's scary.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Can You Check If a Token Has a Permanent Delegate?
&lt;/h2&gt;

&lt;p&gt;Go to the &lt;a href="https://explorer.solana.com/" rel="noopener noreferrer"&gt;Solana Explorer&lt;/a&gt; and search the mint address of the token you want to look up. You will see a &lt;em&gt;Token Extensions&lt;/em&gt; row at the bottom. If it says &lt;em&gt;Permanent Delegate&lt;/em&gt; your token can be transferred or burned by another account: the permanent delegate account.&lt;/p&gt;

&lt;p&gt;As you can see in the picture below:&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%2Fru5f6vpt0mcxr26g028y.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%2Fru5f6vpt0mcxr26g028y.png" alt="Solana Explorer Search Result" width="799" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So next time you transact with tokens, don't forget to look for what extensions it has — it might be some useful information for you. Here is the &lt;a href="https://www.solana-program.com/docs/token-2022/extensions" rel="noopener noreferrer"&gt;Token-2022 Extension Guide&lt;/a&gt; if you want to do your own research.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;See you soon for more posts about my developer journey!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>beginners</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>A Guide to the Solana Token Extensions I Used Over the Last 3 Days</title>
      <dc:creator>Carlos Prada</dc:creator>
      <pubDate>Wed, 27 May 2026 01:25:55 +0000</pubDate>
      <link>https://dev.to/gorilaprada/a-guide-to-the-solana-token-extensions-i-used-over-the-last-3-days-3j3j</link>
      <guid>https://dev.to/gorilaprada/a-guide-to-the-solana-token-extensions-i-used-over-the-last-3-days-3j3j</guid>
      <description>&lt;p&gt;Token Extensions are behaviours &lt;em&gt;embedded directly into a token&lt;/em&gt;, enforced at the program level at creation time. You can set transfer fees, make transfers confidential, or disable token transfers altogether — all baked in, no extra contracts needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Bit of Context
&lt;/h2&gt;

&lt;p&gt;I have been doing the &lt;strong&gt;100 Days of Solana&lt;/strong&gt; challenge, where every day a new challenge teaches you something new about the Solana blockchain from a developer's perspective.&lt;/p&gt;

&lt;p&gt;I started knowing &lt;em&gt;nothing&lt;/em&gt;. Today I can spin up accounts, explain how Solana accounts are encoded at the byte level, make transfers, and create my own tokens with custom extensions. Here's what the last few days looked like.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Day 29 — Token-2022 From Scratch
&lt;/h3&gt;

&lt;p&gt;This was the big one. Using nothing but the &lt;code&gt;spl-token&lt;/code&gt; CLI, I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initialised a token with the &lt;strong&gt;Token-2022 program&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Added a &lt;strong&gt;transfer fee&lt;/strong&gt; (200bps, as you can see in the terminal output below)&lt;/li&gt;
&lt;li&gt;Attached &lt;strong&gt;on-chain metadata&lt;/strong&gt; — name, symbol, and URI — so the token is human-readable&lt;/li&gt;
&lt;li&gt;Created an &lt;strong&gt;Associated Token Account (ATA)&lt;/strong&gt;, the address that holds a specific token instead of SOL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minted&lt;/strong&gt; tokens into it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transferred&lt;/strong&gt; tokens to another wallet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collected the transfer fees&lt;/strong&gt; accumulated from those transactions
Here's what the final mint looked like on the terminal:&lt;/li&gt;
&lt;/ul&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%2F7ksw0qlki3f3hac69xd0.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%2F7ksw0qlki3f3hac69xd0.png" alt="Terminal output of spl-token display showing Reinforce Coin (RFC) with transfer fees at 200bps, metadata pointer, and Token-2022 extensions configured" width="799" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything — fee config, metadata pointer, withdrawal authority — living directly on the mint account. No separate contract, no external registry.&lt;/p&gt;




&lt;h3&gt;
  
  
  Days 30 &amp;amp; 31 — Slower, but Necessary
&lt;/h3&gt;

&lt;p&gt;Funny enough, the exercises on days 30 and 31 were &lt;em&gt;less&lt;/em&gt; technically advanced than what I had already built on day 29. The day 32 challenge turned out to be essentially a more structured version of day 29.&lt;/p&gt;

&lt;p&gt;That said, I don't regret it at all. Days 30 and 31 walked me slowly through each concept individually — transfer fees, metadata, ATAs — one at a time. Everything was extremely pertinent. Sometimes slowing down is how you actually understand what you already did.&lt;/p&gt;




&lt;h3&gt;
  
  
  Day 33 — Soulbound Tokens
&lt;/h3&gt;

&lt;p&gt;On day 33 I built a token that &lt;strong&gt;cannot be transferred&lt;/strong&gt;. Ever.&lt;/p&gt;

&lt;p&gt;These are called &lt;strong&gt;&lt;em&gt;soulbound tokens&lt;/em&gt;&lt;/strong&gt; — and because they can never move between wallets, they must be minted &lt;em&gt;directly into the ATA of the final intended owner&lt;/em&gt;. The token is bound to that address forever.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"What's the point of a token you can't send to anyone?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;More than you'd think. Their use cases include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎓 &lt;strong&gt;Credentials&lt;/strong&gt; — proof you completed a course or passed a certification&lt;/li&gt;
&lt;li&gt;🏅 &lt;strong&gt;Badges&lt;/strong&gt; — on-chain achievements tied to a specific wallet&lt;/li&gt;
&lt;li&gt;🪪 &lt;strong&gt;Membership proofs&lt;/strong&gt; — non-sellable, non-transferable access rights
The restriction is enforced at the Token-2022 program level. There is no workaround — any transfer instruction on a non-transferable mint will always fail.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;While going through the multiple token creation challenges, I dug into the &lt;a href="https://drive.google.com/file/d/13u20-ItOcNXQpqlO3JHrC1eYhtz1PilE/view" rel="noopener noreferrer"&gt;Solana Token Extensions Technical Paper&lt;/a&gt; and discovered something that genuinely caught my attention: &lt;strong&gt;confidential transfers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;By default, &lt;em&gt;everything&lt;/em&gt; on the Solana blockchain is publicly visible — balances, transaction amounts, wallet addresses. Confidential transfers use zero-knowledge proofs to encrypt transaction amounts on-chain, making them verifiable without being readable.&lt;/p&gt;

&lt;p&gt;This opens doors for &lt;strong&gt;business-critical use cases&lt;/strong&gt; that simply weren't possible before on a public chain — payroll, private treasury movements, B2B settlements. The infrastructure is already there. It just needs to be used.&lt;/p&gt;




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

&lt;p&gt;I'll keep learning something new about Solana development every single day. I'll sporadically post write-ups like this one so you can follow along with what I'm discovering on the journey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow me if you want to see more.&lt;/strong&gt; The deeper we go, the more interesting it gets.&lt;/p&gt;

</description>
      <category>100daysofsolana</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>beginners</category>
    </item>
    <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>
